У меня проблемы с получением SQL для отчета, который мне нужно сгенерировать. У меня есть (эквивалент) следующей настройки:
- Таблица
articles
(такие поля, как имя, manufacturer_id
и т. Д.).
- Стол
sales
.
- FK к статьям под названием
article_id
- Целое число, называемое
amount
- A
date
поле
- Поле с именем
type
. Мы можем предположить, что это строка, и она может иметь 3 известных значения - 'morning'
, 'evening'
и 'night'
Я хочу создать агрегированный отчет о продажах с учетом начальной и конечной даты:
+--------------+---------------+--------------+-------------+
| article_name | morning_sales | evening_sales| night_sales |
+--------------+---------------+--------------+-------------+
| article 1 | 0 | 12 | 2 |
| article 2 | 80 | 3 | 0 |
... ... ... ... ...
| article n | 37 | 12 | 1 |
+--------------+---------------+--------------+-------------+
Я бы хотел сделать это максимально эффективно. До сих пор я был в состоянии создать запрос, который даст мне один тип продажи (утром, вечером или ночью), но я не могу сделать это для нескольких типов одновременно. Это вообще возможно?
Это то, что я имею до сих пор; это даст мне название статьи и утренние продажи всех статей за определенный период - другими словами, первые два столбца отчета:
SELECT articles.name as article_name,
SUM(sales.amount) as morning_sales,
FROM "sales"
INNER JOIN articles ON articles.id = sales.articles_id
WHERE ( sales.date >= '2011-05-09'
AND sales.end_date <= '2011-05-16'
AND sales.type = 'morning'
)
GROUP BY sales.article_id
Полагаю, я мог бы сделать то же самое для вечера и ночи, но статьи будут другими; например, некоторые статьи могут продаваться утром, но не вечером.
- Если мне нужно сделать 1 запрос на тип продажи, как мне «смешать и сопоставить» различные списки статей, которые я получу?
- Есть ли лучший способ сделать это (возможно, с какими-то подзапросами)?
Точно так же я могу создать запрос, который дает мне все утренние, вечерние и ночные продажи, группируя по типу. Я предполагаю, что моя проблема в том, что мне нужно сделать два предложения BY BY, чтобы получить этот отчет. Я не знаю, как это сделать, если это вообще возможно.
Я использую PostgreSQL в качестве своей БД, но я бы хотел оставаться как можно более стандартным. Если это помогает, приложение, использующее это, является приложением Rails.