嗨我有mysql表名为content我有一个列“status”,它有3个值converted
,negotiating
和received
。现在我想要计算有多少人已收到,谈判和转换以开发图表。
这是我使用的:
SELECT status,
SUM(CASE WHEN status = 'converted' = 1 THEN 1 ELSE 0 END) AS converted,
SUM(CASE WHEN status = 'negotiating' = 1 THEN 1 ELSE 0 END) AS negotiating,
SUM(CASE WHEN status = 'Received NA' = 1 THEN 1 ELSE 0 END) AS ReceivedNA
FROM content GROUP BY status;
它向我展示了结果,但是我无法使用它。
用于提供我的图表我使用了这个:
$data = array(
array('converted', $converted),
array('negotiating', $negotiating),
array('received', $received)
);
所以我想像这张桌子会解决我的问题:
status result
--------------------------- --------
converted 1
negotiating 5
received 4
那么有人可以建议如何修改我的sql以获得预期的结果吗?
再次感谢
答案 0 :(得分:3)
使用GROUP By
。试试这个 -
SELECT status, count(status) result FROM content GROUP BY status
答案 1 :(得分:1)
要获得非重复计数,请使用GROUP BY。
select status,count(1) as result from content GROUP BY status;
而不是使用总和,计数总是更好更容易的方式
编辑 - 回答评论
COUNT函数的参数是要为每一行计算的表达式。 COUNT函数返回表达式求值为非空值的行数。 (*是一个未评估的特殊表达式,它只返回行数。)
表达式还有两个额外的修饰符:ALL和DISTINCT。这些确定是否丢弃重复项。由于ALL是默认值,因此您的示例与count(ALL 1)相同,这意味着将保留重复项。
由于表达式“1”的每一行的计算结果为非null,并且由于您没有删除重复项,因此COUNT(1)应始终返回与COUNT(*)相同的数字。
答案 2 :(得分:0)
这对你有用吗?
SELECT状态,计数(状态)FROM内容GROUP BY状态;