SQL — подсчет количества экземпляров каждого результата в другой таблице

#postgresql #count

#postgresql #подсчет

Вопрос:

У меня есть база данных postgresql и простой запрос, который извлекает данные из нескольких разных таблиц, чтобы сообщить о конкретных товарах и их продажах. Мне нужно подсчитать общее количество заказов для каждого элемента, и мне еще предстоит добиться успеха в этом.

Запрос извлекает каждый конкретный элемент, доступный для продажи. Мне нужно запросить таблицу «order_item» и подсчитать количество записей или каждого отдельного элемента … что будет конкретным количеством каждого элемента «kitchen_item_name» в таблице заказов.

 select distinct
kitchen_item.id as "id",
kitchen_item.name as "Dish Name",
kitchen_item.price as "Price",
kitchen_item.created as "Created On",
account.firstname||',
'||account.lastname as "Seller Name",
account.email as "Seller Email",
account.phone as "Seller Phone", 
address.address as "Seller Address", 
address.zip as "Seller Zip", 
address.neighborhood as "Seller Neighborhood"
from kitchen_item
left join menu_item on (kitchen_item.id = menu_item.kitchen_item_id)
left join order_item on (menu_item.id = order_item.menu_item_id)
left join store on (kitchen_item.store_id = store.id)
left join account on (store.account_id = account.id)
left join store_address on (store.id = store_address.store_id)
left join address on (store_address.address_id = address.id)
  

Это количество должно быть последним столбцом в выходных данных, у меня было 2 мысли — первым будет подзапрос:

 (select count distinct order_item.kitchen_item_name from order_item)
  

Добавление этой строки прямо перед строкой «from» не работает.

Итак, мне интересно, нужно ли мне создать временную таблицу и вставить в нее исходный запрос, а затем присоединиться к подсчету? Как это обычно делается?

Комментарии:

1. Всегда присоединяйтесь к ключу — menu_item он уже есть.

2. @clamp правильно, хорошо, я присоединился к таблице order_item с помощью ключа menu_item… У меня сложилось впечатление, что выполнение этого таким образом затруднило бы подсчет количества заказов в таблице order_item и правильное его применение для каждой строки

Ответ №1:

Черт, я думаю, что я действительно понял это!

 select distinct
kitchen_item.id as "id",
kitchen_item.name as "Dish Name",
kitchen_item.price as "Price",
kitchen_item.created as "Created On",
account.firstname||',
'||account.lastname as "Seller Name",
account.email as "Seller Email",
account.phone as "Seller Phone", 
address.address as "Seller Address", 
address.zip as "Seller Zip", 
address.neighborhood as "Seller Neighborhood",
(
SELECT
    COUNT(DISTINCT menu_item_id)
    FROM order_item
    WHERE order_item.menu_item_id = menu_item.id
    AND order_item.kitchen_item_name = kitchen_item.name
) AS "Total Dish Sold"
from kitchen_item
left join menu_item on (kitchen_item.id = menu_item.kitchen_item_id)
left join order_item on (menu_item.id = order_item.menu_item_id)
left join store on (kitchen_item.store_id = store.id)
left join account on (store.account_id = account.id)
left join store_address on (store.id = store_address.store_id)
left join address on (store_address.address_id = address.id)
  

Важным моментом является-

 (
SELECT
    COUNT(DISTINCT menu_item_id)
    FROM order_item
    WHERE order_item.menu_item_id = menu_item.id
    AND order_item.kitchen_item_name = kitchen_item.name
) AS "Total Dish Sold"