【问题标题】:SQL Filtering group dataSQL 过滤组数据
【发布时间】:2015-03-10 21:59:22
【问题描述】:

我有一个这样的数据库

id name group

这样的数据

1 john A
2 john B
3 charles B
4 peter B
5 rose B
6 charles A
7 justin C

如您所见,可能是一个 ID 与一个组或多个组相关联

我需要一个过滤查询

a) 属于 A 组和 B 组 b) 在 A 组但不在 B 组 c) 仅在 A 组中

【问题讨论】:

  • 你试过什么?

标签: mysql filtering


【解决方案1】:
    a. select distinct name from tablename where group = 'A' or group = 'B';
    b. select distinct name from tablename where group = 'A' and group <> 'B';
    c. select distinct name from tablename where group = 'A' and 
         group not in (select distinct(t1.group) from tablename t1 
                         where t1.group <> 'A');

【讨论】:

  • 这看起来不错,唯一的问题是当我无法计算组时,在 (c) 上,not in 应该能够在不手动列出它们的情况下实现它
  • @Zuker 好的,我让它更有活力了。
【解决方案2】:

我喜欢使用group byhaving 子句来解决这些问题。对于您的第一个问题:

select name
from table
group by name
having sum(group = 'A') > 1 and sum(group = 'B') > 0;

另外两个是:

having sum(group = 'A') > 1 and sum(group = 'B') = 0;
having sum(group = 'A') > 1 and sum(group <> 'A') = 0;

【讨论】:

    猜你喜欢
    • 2021-05-23
    • 2013-01-03
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多