SQL新手 - 需要查询帮助

时间:2011-06-30 14:35:22

标签: 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的变量选择食物表中的所有食物,该变量是食物项目在报告中具有的所有报告的总数?

我一直在尝试:

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

4 个答案:

答案 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