当我使用此查询时:
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 |
-----------------------
我还有一个问题:在第一个查询中,如果没有可用的空间,通道的行将不会出现:如果在第一个查询中没有可用的通道foo,则结果示例。
---------------
| name | free |
---------------
| bar | 2 |
---------------
有什么理想的查询方法吗?有可能吗?
答案 0 :(得分:0)
您可以使用条件聚合,例如
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)
中使用表达式,则结果将为布尔值0/1,因此您可以使用上面的条件计数