【发布时间】:2011-05-09 21:44:30
【问题描述】:
我无法为需要生成的报告获取 SQL。我有(相当于)以下设置:
- 一张表
articles(字段,如姓名、manufacturer_id等)。 - 一个表
sales。- FK 到名为
article_id的文章 - 一个名为
amount的整数 -
date字段 - 名为
type的字段。我们可以假设它是一个字符串,它可以有 3 个已知值 -'morning'、'evening'和'night'
- FK 到名为
我想生成一份汇总的销售报告,给定开始日期和结束日期:
+--------------+---------------+--------------+-------------+
| 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 应用程序。
【问题讨论】:
标签: sql ruby-on-rails postgresql