来自同一列的SQL计数值

时间:2015-05-22 05:38:59

标签: php mysql

嗨我有mysql表名为content我有一个列“status”,它有3个值convertednegotiatingreceived。现在我想要计算有多少人已收到,谈判和转换以开发图表。

这是我使用的:

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以获得预期的结果吗?

再次感谢

3 个答案:

答案 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状态;