我可以使用特定列中字符的实例数来计算列吗?
+---+---+
| 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')
,
答案 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
(除非points
是NULL
,而你的数据不是这样)。
MySQL将布尔值视为数字上下文中的整数,0表示false,1表示true。因此,将它们相加会计算出某些事情的真实次数。