正在寻找GROUP BY的轻微变体

时间:2011-09-28 15:47:36

标签: mysql

我有一张这样的表:

id attr
1  A
2  A
3  C
4  C
5  D
6  F

我想要计算所有A的B(但不是C的D等等)。请注意我的表没有B。

所以我想要一个这样的命令:

SELECT count(attr=A, attr=B) FROM table;

或者这个:

SELECT count(*) FROM table GROUP_BY attr IN (A, B);

并获得:

attr count
A    2
B    0

我的实际表格大约有一千attr秒。我想在他们的大约一百个左右做一个group_by-ish的事情。重要的是我得到某些attrs的零计数,并且我可以将attr与计数相关联。

我知道这是一个基本问题,如果之前有人问我,我也不会感到惊讶。我搜索过..但不管怎样我的道歉......

2 个答案:

答案 0 :(得分:2)

SELECT T.attr,
       COUNT(Y.id)
FROM   (SELECT 'A' AS attr
        UNION ALL
        SELECT 'B') AS T
       LEFT JOIN YourTable Y
         ON Y.attr = T.attr
GROUP  BY T.attr  

答案 1 :(得分:1)

这应该适合你。

SELECT T.Attr,Count(A.ID)
FROM (
SELECT CONVERT('A',char) AS Attr
UNION 
SELECT CONVERT('B',char)  AS Attr
) AS T
LEFT JOIN MyTable AS A
ON T.Attr=MyTable.Attr
GROUP BY T.Attr
ORDER BY T.Attr;

转换部分可能没有必要,但在我的测试中是必要的。