MySQL 加入查询 GROUP BY

标签 mysql sql

我有 2 个表。 (酒店、地点)。

我想检索所有位置以及该位置的酒店数量。

现在我有以下查询:

SELECT locations.*, 
COUNT(*) as no_of_hotels 
FROM locations RIGHT JOIN hotels ON hotels.location_id = locations.id 
GROUP BY locations.id 
ORDER BY no_of_hotels DESC

查询工作正常,但问题是,它只给我包含 1 个或多个酒店的位置。我想显示所有位置(即使该位置没有酒店)。

最佳答案

你应该改为左连接:

SELECT locations.*, 
       COUNT(distinct hotels.id) as no_of_hotels 
       FROM locations 
       LEFT JOIN hotels ON hotels.location_id = locations.id 
       GROUP BY locations.id 
       ORDER BY no_of_hotels DESC

否则这可能更容易理解:

select
  locations.*
  (select count(*) from hotels where hotels.location_id = locations.id) as no_of_hotels 
from
  locations
order by no_of_hotels desc

关于MySQL 加入查询 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23028802/

相关文章:

mysql - 如何使用 GROUP_CONCAT 在 GROUP BY 之后加入?

sql - T-SQL : multiple usage of CTE alias - not only in outer query

mysql - Docker 数据库容器正在运行。 pid <id> 的另一个进程正在使用 unix 套接字文件

php - 无法访问 Drupal 的 MySQL 数据库

mysql - SQL Server 的 sp_xml_preparedocument 在 MySQL 中的等效 SP

mysql - auto_saved_sqls 是否显示在远程服务器中?

MYSQL逆向 "filesystem"迭代

sql - 如果整个列中的值为空,则从输出中删除

sql - 如何使用与计数不同语句相关的百分比创建附加列

mysql - Mysql表水平排序