带有嵌套子查询的COUNT()

时间:2017-02-03 21:31:35

标签: mysql count group-by

我可以使用特定列中字符的实例数来计算列吗?

+---+---+
| i | p |
+---+---+
| A | 3 |
| B | 3 |
| C | 0 |
| A | 1 |
| B | 1 |
| C | 3 |
| A | 1 |
| B | 0 |  
| C | 0 |
+---+---+

查询:

SELECT i, SUM(p) AS Sp, COUNT(p) AS Cp FROM table   
GROUP BY i

我想得到这个:

+---+----+----+-----+-----+-----+
| i | Sp | Cp | x3x | x1x | x0x |
+---+----+----+-----+-----+-----+
| A |  5 |  3 |  1  |  2  |  0  |
| B |  4 |  3 |  1  |  1  |  0  |
| C |  4 |  3 |  1  |  0  |  2  |
+---+----+----+-----+-----+-----+

基本上我想在一列中按3,0或1的实例计算,其中列按id' i'

我尝试了这个以及许多变化,但我似乎无法实现。 COUNT(P WHERE p='3')COUNT(P WHERE p='1')COUNT(P WHERE p='0')

我是否有办法将子查询放入我在研究中遗漏的COUNT()中?

我也试过

COUNT(Points='3')COUNT(='1')COUNT(Points='0')

1 个答案:

答案 0 :(得分:2)

你很近:

select i, sum(points), count(*),
       sum(Points = 3), sum(points = 1), sum(Points = 0)
from t
group by i;

在这种情况下,一个小的区别是删除了值周围的单引号。与数字比较时,请勿使用单引号。仅对字符串和日期常量使用单引号。

更重要的更改是从count()sum()count()计算非NULL值的数量。好吧,布尔表达式是true还是false - 但不是NULL(除非pointsNULL,而你的数据不是这样)。

MySQL将布尔值视为数字上下文中的整数,0表示false,1表示true。因此,将它们相加会计算出某些事情的真实次数。