Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL子查询计数与查询计数不同_Mysql_Group By_Count_Pivot - Fatal编程技术网

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

MySQL子查询计数与查询计数不同,mysql,group-by,count,pivot,Mysql,Group By,Count,Pivot,使用此查询时: 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 '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 |
---------------

有什么好主意可以提出这个完美的问题吗?有可能吗?

您可以使用条件聚合,如

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,因此您可以使用上面的

获得条件计数!非常感谢。