Mysql SQL新手-需要查询帮助吗
表1:食品Mysql SQL新手-需要查询帮助吗,mysql,sql,Mysql,Sql,表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的变量选择食物表中的所有食物,numReports是食物项在报告中的所有报告的总数 我一直在尝试: SELECT food.
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的变量选择食物表中的所有食物,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
您可以通过使用GROUPBY来实现这一点
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
您可以通过使用GROUPBY来实现这一点
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
也许有一种优化的方法可以做到这一点,但这里有一个查询应该可以得到您的结果
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
也许有一种优化的方法可以做到这一点,但这里有一个查询应该可以得到您的结果
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
这就是我一直在寻找的优化……新groupby是最适合的树;)这就是我一直在寻找的优化……新groupby是最适合的树;)几乎正确,只需在子选项中移动
计数即可。请参考您的答案以获得帮助,谢谢。为什么人们会选择使用内部联接而不是我们的方式呢?我真的不知道,使用子查询(正如我们所做的那样)更容易编写,因为您不必指定所有按列分组(可以是多列),如果您不按主键分组,子查询将具有更好的性能。几乎正确,只需在子选项中移动计数
。请参考您的答案寻求帮助,谢谢。为什么人们会选择使用内部联接而不是我们的方式呢?我真的不知道,使用子查询(正如我们所做的那样)更容易编写,因为您不必指定所有分组列(可以是多个列),如果您不按主键分组,子查询将具有更好的性能。