【问题标题】:2 dimensional table query with join and PostgreSQL [closed]带有连接和 PostgreSQL 的二维表查询 [关闭]
【发布时间】:2021-01-14 10:38:51
【问题描述】:

试图从 SQL 查询 (Postgres) 返回一个二维表。阅读数据透视表(但不确定它是否对连接有效)和交叉表/表函数,但没有运气。

预期结果

            App A | App B
2020-01-01  8     | 2
2020-02-01  14    | 5
2020-03-01  13    | 0

我有 2 张桌子:

  • 应用程序:名称
  • 订单:日期,...

我希望按月和应用计算订单。

到目前为止我的尝试。

SELECT date_trunc('month', date) as date, count(1), x.name
FROM (SELECT date_trunc('month', date) as date, application_id
  FROM orders
  GROUP BY date, application_id) o
JOIN applications x ON o.application_id = x.id AND x.id in (1, 2, 5)  
WHERE
  o.date > NOW() - '9 months'::interval
group by date, x.name
order by date, x.name

返回

date        count name
2020-01-01  8     App A
2020-01-01  2     App B
2020-02-01  14    App A
2020-02-01  5     App B

谢谢。

【问题讨论】:

  • 这是一个常见问题解答。请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表格的代码的 SQL。暂停完成总体目标,将代码砍到第一个表达式,而不是给出你期望的内容并说出你期望的内容以及为什么。

标签: sql postgresql count pivot inner-join


【解决方案1】:

要将结果集旋转到固定的值列表,您可以进行条件聚合:

select date_trunc('month', o.date) date,
    count(*) filter(where a.name = 'App A') app_a,
    count(*) filter(where a.name = 'App B') app_b
from applications a
inner join orders o on o.application_id = a.id
where o.date > date_trunc('month', current_date) - '9 months'::interval
group by 1
order by 1

请注意,我修改了 where 子句,以便过滤整个月份。

【讨论】:

  • 非常感谢@gmb。解决了。您能否编辑您的答案以阅读o.application_id = a.id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2012-01-25
  • 2016-04-11
  • 2012-01-22
  • 2014-07-18
  • 2020-11-29
  • 2022-10-19
相关资源
最近更新 更多