Новое в SQL - нужна помощь с запросом - PullRequest
1 голос
/ 30 июня 2011

Таблица 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 ]

3 голосов
/ 30 июня 2011
SELECT food.name,
       COUNT(*) as food_count
  FROM reports 
       INNER JOIN food ON reports.food_id = food.id
  GROUP BY food.name;
2 голосов
/ 30 июня 2011

Этого можно добиться с помощью 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    
0 голосов
/ 30 июня 2011

Возможно, существует оптимизированный способ сделать это, но вот один запрос, который должен получить ваши результаты

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
0 голосов
/ 30 июня 2011
SELECT 
    food.id AS foodId, 
    food.name AS foodName,
    (SELECT COUNT(*) FROM reports WHERE reports.food_id = food.id)
FROM 
    food
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...