我无法获取需要生成的报告的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