SQL 使用 'Group By' 和 'WHERE' return 查询所有值为 0 的值(如果它们没有数据)
SQL query using 'Group By' and 'WHERE' return all values with 0 count if they have no data
我有一个名为 LOG 的 table,在这个 table 中我有一个名为 Level 的列并且有 3 个可能的值:'INFO'、'WARNING'、'ERROR'.
我想对每个值进行计数,所以我的查询是
SELECT Level, COUNT(*) AS Count FROM LOG GROUP BY Level
我得到的结果是 'ERROR': X, 'INFO': Y, 'WARN': Z.
我有一个名为 'Logger' 的第二列,它可以包含很多值,例如 'Upload Data'。现在我只想为 Logger='Upload Data'
添加 WHERE 条件
SELECT Level, COUNT(*) AS Count FROM LOG WHERE Logger='Upload Data' GROUP BY Level
现在我得到的结果是 'ERROR': X, 'INFO': Y.
'WARN' 缺失
这是我的问题。
如何将这个查询修改为return这个结构
'ERROR': X, 'INFO': Y, 'WARN': 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
试试这个 -
SELECT
Level,
COUNT(IF(Logger='Upload Data', Logger, NULL)) AS COUNT
FROM LOG
GROUP BY Level
我有一个名为 LOG 的 table,在这个 table 中我有一个名为 Level 的列并且有 3 个可能的值:'INFO'、'WARNING'、'ERROR'.
我想对每个值进行计数,所以我的查询是
SELECT Level, COUNT(*) AS Count FROM LOG GROUP BY Level
我得到的结果是 'ERROR': X, 'INFO': Y, 'WARN': Z.
我有一个名为 'Logger' 的第二列,它可以包含很多值,例如 'Upload Data'。现在我只想为 Logger='Upload Data'
添加 WHERE 条件SELECT Level, COUNT(*) AS Count FROM LOG WHERE Logger='Upload Data' GROUP BY Level
现在我得到的结果是 'ERROR': X, 'INFO': Y.
'WARN' 缺失
这是我的问题。
如何将这个查询修改为return这个结构 'ERROR': X, 'INFO': Y, 'WARN': 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
试试这个 -
SELECT
Level,
COUNT(IF(Logger='Upload Data', Logger, NULL)) AS COUNT
FROM LOG
GROUP BY Level