#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"