gpt4 book ai didi

MySQL 子查询计数与查询计数不同

转载 作者:行者123 更新时间:2023-11-29 17:26:23 25 4
gpt4 key购买 nike

当我使用此查询时:

SELECT channels.name, COUNT(places.id) AS 'free' FROM places INNER JOIN channels ON places.channelId = channels.id WHERE state = 'free' GROUP BY channelId;

结果是:

---------------
| name | free |
---------------
| foo | 1 |
| bar | 2 |
---------------

这给出了总名额:

SELECT channels.name, COUNT(places.id) AS 'total' FROM places INNER JOIN channels ON places.channelId = channels.id GROUP BY channelId;

它给出了这个结果:

----------------
| name | total |
----------------
| foo | 3 |
| bar | 4 |
----------------

你有办法得到这个结果吗? :

-----------------------
| name | free | total |
-----------------------
| foo | 1 | 3 |
| bar | 2 | 4 |
-----------------------

我还有一个额外的问题:在第一个查询中,如果没有可用的位置,则 channel 的行将不会出现:如果第一个查询的 channel foo 没有可用的位置,则结果示例。

---------------
| name | free |
---------------
| bar | 2 |
---------------

有没有办法实现这个完美的查询?这可能吗?

最佳答案

您可以使用条件聚合,例如

SELECT c.name, 
COUNT(p.id) AS total ,
SUM(state = 'free') AS free -- SUM(CASE WHEN state = 'free' THEN 1 ELSE 0 END)
FROM places p
INNER JOIN channels c ON p.channelId = c.id
GROUP BY c.name;

在 mysql 中,当在 sum(a= b) 中使用表达式时,它将产生 bool 值 0/1,因此您可以使用上面的方法获取条件计数

关于MySQL 子查询计数与查询计数不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50945465/

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