我如何使用 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
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
我有这样一个 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
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