mysql - 使用 'Group By' 和 'WHERE' 的 SQL 查询如果没有数据则返回所有计数为 0 的值

标签 mysql group-by where-clause

我有一个名为 LOG 的表,在这个表中我有一个名为 Level 的列并且有 3 个可能的值:'INFO'、'WARNING'、'ERROR'。

我想对每个值进行计数,所以我的查询是

SELECT Level, COUNT(*) AS Count FROM LOG GROUP BY Level

我得到的结果是 'ERROR': X, 'INFO': Y, 'WARN': Z。

我有一个名为“Logger”的第二列,它可以接受很多值,例如“上传数据”。现在我只想为 Logger='Upload Data' 添加 WHERE 条件

SELECT Level, COUNT(*) AS Count FROM LOG WHERE Logger='Upload Data' GROUP BY Level

现在我得到的结果是 'ERROR': X, 'INFO': Y。

'WARN' 丢失

这是我的问题。

如何修改此查询以返回此结构 “错误”:X,“信息”:Y,“警告”:0

如果没有数据呢?

最佳答案

你可以使用UNION ALL:

SELECT Level, SUM(`Count`) AS `Count`
FROM (
    SELECT Level, COUNT(*) AS `Count` FROM LOG WHERE Logger='Upload Data' GROUP BY Level
    UNION ALL
    SELECT Level, 0 AS `Count` FROM LOG GROUP BY Level
) t
GROUP BY Level

关于mysql - 使用 'Group By' 和 'WHERE' 的 SQL 查询如果没有数据则返回所有计数为 0 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42292696/

相关文章:

php - 在 mysql 数据库中搜索时遇到问题

php - 使用 CodeIgniter 分组

python - 将 groupby 函数应用于 df 的 Matplotlib 时间序列图

sql - 仅选择单行时获取总行数

c# - .Network 中的 LINQ Where() 子句如何?

mysql - 将 csv 文件从 mysql 导出到本地计算机

php - 在 PHP 中连接条件查询,同时尝试从多个表中获取行

sql - 在 SQL WHERE ... IN 子句中使用文本文件中的术语

java - 如何从java向mysql插入自动增量值

asp.net - 由于group by子句,撤消无效错误