gpt4 book ai didi

不同类型的 Mysql 计数

转载 作者:行者123 更新时间:2023-11-29 06:00:23 24 4
gpt4 key购买 nike

我在 MySQL 数据库中有 2 个表,hosts 和 events,它们可以加入 thanks 和 ID 字段。我查询的一个特别感兴趣的字段是,对于 hosts 表,name;对于事件类型。如果我在它们之间进行连接,示例结果是:

enter image description here

因此,在此图像中,例如,您可以看到主机 Achille 有 4 个事件:2 个操作系统类型、1 个应用程序时间和 1 个服务类型。

我的问题是:使用聚合器运算符,是否可以制作一个表格,对于每个主机,我可以显示按类型划分的事件数量?更具体地说,所需的表可能具有此标题:

enter image description here

在我们之前的示例中,可能会返回:

| Achille | 1 | 2 | 1 |
| Aiace | 1 | 1 | 0 |
| Ulisse | 0 | 0 | 1 |

我的第一个尝试是这个查询:

    SELECT hosts.name, count(e1.type) as Applications, count(e2.type) as OS, count(e3.type) as Type 
FROM hosts JOIN events e1 ON hosts.id = e1.host_id
JOIN events e2 ON hosts.id = e2.host_id
JOIN events e3 ON hosts.id = e3.host_id
WHERE e1.type = 'Applications' AND e2.type = 'OS' AND e3.type = 'Services'
GROUP BY hosts.name;

但不起作用。

最佳答案

您不需要多次加入事件表。只做条件聚合。

SELECT h.name, 
count(case when e.type = 'Applications' then 1 end) as Applications,
count(case when e.type = 'OS' then 1 end) as OS,
count(case when e.type = 'Services' then 1 end) as Services
FROM hosts h
JOIN events e ON h.id = e.host_id
GROUP BY h.name;

或者简而言之,使用sum

SELECT h.name, 
sum(e.type = 'Applications') as Applications,
sum(e.type = 'OS') as OS,
sum(e.type = 'Services') as Services
FROM hosts h
JOIN events e ON h.id = e.host_id
GROUP BY h.name;

关于不同类型的 Mysql 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45505978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com