列分组

时间:2018-11-06 22:07:53

标签: sql select

|appop

我想编写一个SQL查询来仅获取具有错误的a或b或同时包含a和b的记录
输出应为第2、3组,如 组2包含a和b,组3仅包含a。
除a,b之外的任何包含Error的组均不应返回。

2 个答案:

答案 0 :(得分:2)

我将对不是ab的错误进行分组并使用条件:

SELECT   [group] -- Assuming MS SQL Syntax, like Ross Presser did in his answer
FROM     mytable
GROUP BY [group]
HAVING   COUNT(CASE WHEN [error] NOT IN ('a', 'b') THEN 1 END) = 0

答案 1 :(得分:1)

不确定DBMS,因此以下内容可能不适用,但是要使用相关子查询提供另一种选择:

SELECT DISTINCT a.Group
FROM Table1 a
WHERE NOT EXISTS (SELECT 1 FROM Table1 b WHERE a.Group = b.Group AND b.Error NOT IN ('a','b'))

或在包含至少一个错误代码不等于LEFT JOINa的网上论坛查询中使用b

SELECT DISTINCT a.Group
FROM 
    Table1 a LEFT JOIN
    (
        SELECT DISTINCT t.Group
        FROM Table1 t
        WHERE t.Error <> 'a' AND t.Error <> 'b'
    ) b
    ON a.Group = b.Group
WHERE b.Group IS NULL

还有一个非常具体的您的示例,但这只是为了好玩-

SELECT t.Group
FROM Table1 t
GROUP BY t.Group
HAVING MIN(t.Error) >= 'a' AND MAX(t.Error) <= 'b'

在以上所有内容中,将Table1替换为表名。