【问题标题】:Count columns by status in sql在sql中按状态计算列
【发布时间】:2018-07-20 15:25:41
【问题描述】:

我需要一个 SQL 表中的 count 总寄存器。
我有这样的状态:

SELECT 
    COUNT(CASE WHEN status = 'WAITING_MEASUREMENT' THEN 1 ELSE NULL END) as '1',
    COUNT(CASE WHEN status = 'WAITING_WEIGHMENT' THEN 1 ELSE NULL END) as '2',
    COUNT(CASE WHEN status = 'WAITING_DATA_ENTRY' THEN 1 ELSE NULL END) as '3',
    COUNT(CASE WHEN status = 'WAITING_PICTURES' THEN 1 ELSE NULL END) as '4'
FROM product;

但是当我运行查询时,我在所有列中都有相同的结果。 查询有什么问题?

【问题讨论】:

  • 添加示例数据和查询的其余部分,您的代码应该可以正常工作。
  • @AaronDietz 感谢您的指点。你是对的,他应该工作..删除答案。
  • 所有列的结果如何?如果你得到 0 那么你在那里没有那些状态。或者像 Obiwan 说的那样,那些不是您正在寻找的状态
  • Unable to replicate 请分享一些出现此问题的示例数据。
  • 我不确定当别名是字符串文字而不是带引号的标识符时 mysql 会发生什么......

标签: mysql sql


【解决方案1】:

你应该 sum 而不是 count,也应该使用 0 而不是 null,count 只会计算所有记录。

 SELECT 
    SUM(CASE WHEN status = 'WAITING_MEASUREMENT' THEN 1 ELSE 0 END) as '1',
    SUM(CASE WHEN status = 'WAITING_WEIGHMENT' THEN 1 ELSE 0 END) as '2',
    SUM(CASE WHEN status = 'WAITING_DATA_ENTRY' THEN 1 ELSE 0 END) as '3',
    SUM(CASE WHEN status = 'WAITING_PICTURES' THEN 1 ELSE 0 END) as '4'
FROM product;

【讨论】:

  • 你看过上面评论中分享的sqlfiddle JNevill吗?
  • 你错了,COUNT() 不算nulls 两者是完全相同的查询。但我特别反对使用SUM(),因为COUNT() 正是这样做的......“计数”。
  • btw @PatrickArtner 已经发布了相同的答案并在实现与 OP 相同时删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 2019-01-29
  • 2017-03-07
  • 2020-09-19
  • 1970-01-01
  • 2016-09-24
相关资源
最近更新 更多