我如何使用 mysql 计数和 select 查询?

How I use mysql count with select query?

我有这样一个 mysql select 查询:

select r.restaurant_id, r.restaurant_name, r.city_id, c.name
from restaurants r
inner join cities c on c.id = r.city_id;  

这是上述查询的结果:

+---------------+----------------------+---------+-------------+
| restaurant_id | restaurant_name      | city_id | name        |
+---------------+----------------------+---------+-------------+
|             7 | Somasiri Bake House  |       5 | Mumbai      |
|             8 | Indian    Bake House |       7 | Chennai     |
|             9 | KFC Rest             |       5 | Mumbai      |    
|            10 | Indian t             |       5 | Mumbai      |
+---------------+----------------------+---------+-------------+

现在我想显示所有可用的城市以及一个城市现有的餐馆数量。

例如:孟买 (3)、金奈 (1) 等等

我用 mysql COUN() 试过,但它对我不起作用。

SELECT c.name, count(r.city_id) AS count
FROM cities c
INNER JOIN restaurants r ON c.id = r.city_id;

谁能告诉我这有什么问题吗?

希望有人能帮助我。 谢谢你。

这称为分组或聚合查询,您需要告诉它如何对您的元素进行分组。

只需添加

GROUP BY r.restaurant_id, r.restaurant_name, r.city_id, c.name

最后,在最后一个分号之前。

如果您不需要餐厅数据,请使用简单的分组依据:

select c.name, count(r.city_id) as available
from cities c
left join restaurants r on c.id = r.city_id
group by r.city_id

参见SQLFiddle


或者,如果您也需要餐厅数据,select 首先来自城市,然后左连接到其他表,这样仍然会返回没有餐厅的城市。将左连接添加到计算每个城市频率的子查询:

select
  r.restaurant_id,
  r.restaurant_name,
  c.id,
  c.name,
  coalesce(available, 0) available
from cities c
left join restaurants r on c.id = r.city_id
left join (select city_id, count(*) available from restaurants group by 1) a
  on a.city_id = r.city_id

SQLFiddle

SELECT c.name, COALESCE(count(r.city_id), 0) AS count
FROM cities c
LEFT JOIN restaurants r ON c.id = r.city_id
GROUP BY c.id