UserGroup by & order by 过滤 MySQL 查询

Posted

技术标签:

【中文标题】UserGroup by & order by 过滤 MySQL 查询【英文标题】:UserGroup by & order by to filter the MySQL query 【发布时间】:2018-11-24 15:31:50 【问题描述】:

我编写了一个查询来对列中的绿色状态和红色状态求和,并根据节点名称对它们进行分组。

SELECT `Node`, Date(`DOR`) as "Date of Report",
    SUM(CASE WHEN `Color` = 'Green' THEN 1 ELSE 0 END) 'Pass'
 , SUM(CASE WHEN `Clor` = 'Red' THEN 1 ELSE 0 END) 'Fail'
 , SUM(CASE WHEN `Color` = 'Green' or `Color` = 'Red' THEN 1 ELSE 0 END) 'Total Checks'
FROM Monitor Where date(`TOI`) >= DATE(NOW()) - INTERVAL 7 DAY
Group by `Node`

如何通过过滤掉 Red 为 0 的结果(我不想显示它是否为 0,因为不需要注意)并根据 Reds 计数按 Desc 顺序排序,从而使查询更好?

谢谢,

【问题讨论】:

您的查询有很多问题。您按Server 分组,然后选择NodeDOR。您应该包含示例数据来解释您在此处尝试执行的操作。 对不起,这是我的错误。我正在选择节点并按节点分组。更正了我的问题。谢谢 【参考方案1】:

只是为了回答您关于过滤 Reds = 0 & order desc on Reds count 的问题:

SELECT `Node`, Date(`DOR`) as "Date of Report",
    SUM(CASE WHEN `Color` = 'Green' THEN 1 ELSE 0 END) as Pass
 , SUM(CASE WHEN `Clor` = 'Red' THEN 1 ELSE 0 END) as Fail
 , SUM(CASE WHEN `Color` = 'Green' or `Color` = 'Red' THEN 1 ELSE 0 END) as Total Checks
FROM Monitor Where date(`TOI`) >= DATE(NOW()) - INTERVAL 7 DAY
Group by `Server`
HAVING Fail > 0
order by Reds desc

但是,正如 Tim 所提到的,您在查询中遇到问题,例如,您正在按服务器分组,但随后选择了 NodeDOR

尝试包含表结构和示例数据,以便我们能够更好地理解问题并为您提供正确的答案

【讨论】:

对不起,这是我的错误。我正在选择节点并按节点分组。更正了我的问题。谢谢 我的回答应该对你有用。尝试一下。如果有帮助,请接受/支持

以上是关于UserGroup by & order by 过滤 MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

postgresql----排序ORDER BY,分组GROUP BY,分页OFFSET&&LIMIT

Kohana ORM(自定义查询)与 MySQL ORDER BY & GROUP BY

ORDER BY CASE & Ordinal 不工作

LIMIT&限制查询结果的数量&ORDER BY&排序&分页

在 MySQL 中使用 Case 加入 Group By & Order

ORACLE/SQL: wm_concat & order by