表1:食物
id name
-------
1 Hot-dog
2 Sandwich
3 Apple
表2:报告
id food_id date
----------------
1 1 2010-01-01
2 1 2010-02-01
3 2 2011-02-01
如何设计查询以使用名为numReports的变量选择食物表中的所有食物,该变量是食物项目在报告中具有的所有报告的总数?
我一直在尝试:
SELECT
food.id AS foodId,
food.name AS foodName,
count(
SELECT * FROM reports WHERE reports.food_id=food.id
) AS numReports
FROM
food
输出:
id name numReports
-------------------
1 Hot-dog 2
2 Sandwich 1
3 Apple 0
答案 0 :(得分:3)
SELECT food.name,
COUNT(*) as food_count
FROM reports
INNER JOIN food ON reports.food_id = food.id
GROUP BY food.name;
答案 1 :(得分:2)
您可以使用GROUP BY来实现此目的。
SELECT food.id AS foodId,
food.name As foodName,
Count(*) AS numReports
FROM food
INNER JOIN reports
ON food.id = reports.food_id
GROUP BY food.id,
food.name
您还可以使用相关子查询。
SELECT food.id AS foodId,
food.name As foodName,
(SELECT Count(*) FROM reports WHERE food.id = reports.food_id) AS numReports
FROM food
答案 2 :(得分:0)
SELECT
food.id AS foodId,
food.name AS foodName,
(SELECT COUNT(*) FROM reports WHERE reports.food_id = food.id)
FROM
food
答案 3 :(得分:0)
可能有一种优化的方法可以做到这一点,但这里有一个应该得到结果的查询
select
food.id,
food.name,
reports.reportcount
from
food
inner join
(select
food_id,
count(food_id) reportcount
from
report
group by (food_id)) as reports
on food.id=reports.food_id