我無法獲取需要生成的報告的SQL。我有以下設置(的等價物):執行兩個GROUP BY的SQL查詢?
- 一個表
articles
(字段,如姓名,manufacturer_id
等)。 - 表格
sales
。- FK to文章叫
article_id
- 一個整數稱爲
amount
- 一個
date
場 - 的字段名爲
type
。我們可以假定它是一個字符串,它可以有3個已知值 -'morning'
,'evening'
和'night'
- FK to文章叫
我想產生聚合的銷售報告,給定一個開始日期和結束日期:
+--------------+---------------+--------------+-------------+
| 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個請求,我該如何「混合搭配」我將獲得的不同文章列表?
- 有沒有更好的辦法做到這一點(也許有些子查詢)?
同樣,我可以建立一個查詢,讓我所有的早上,晚上和夜間銷售,按類型分組。我想我的問題是我需要做兩個GROUP BY才能得到這個報告。我不知道該怎麼做,如果可能的話。
我使用PostgreSQL作爲我的數據庫,但我想盡可能保持標準。如果有幫助,使用這個應用程序是一個Rails應用程序。
謝謝:)我一定是錯過了讀書的問題 – 2011-05-09 22:34:29
感謝一個時很多!這幫了我很大的忙! – kikito 2011-05-10 07:27:15