【问题标题】:Basic SQL - Adding Year on Year Revenue Numbers基本 SQL - 添加年收入数字
【发布时间】:2020-07-08 15:48:09
【问题描述】:

所以我对 SQL 比较陌生,并且在将多个查询连接到单个表中时遇到了麻烦。

我在公司没有人可以谈论这个问题,我需要一些关于如何创建包含年复一年数字的表格的基本建议。

我的基本脚本如下,我不知道如何链接 2 以便我可以并排显示 2 年的收入。

SELECT a.date_key, b.account_name,a.client_id,SUM(a.revenue) as "Revenue 2019" FROM spreadsheet as a
LEFT JOIN account_file as b on a.client_id = b.client_id
WHERE date_key >= 2019 and date_key < 2020. 
GROUP BY a.date_key, a.client_id, b.account_name


SELECT a.date_key, b.account_name,a.client_id,SUM(a.revenue) as "Revenue 2018" FROM spreadsheet as a
LEFT JOIN account_file as b on a.client_id = b.client_id
WHERE date_key >= 2018 and date_key < 2019. 
GROUP BY a.date_key, a.client_id, b.account_name

我已经看到了应该如何工作的示例,但我无法完全理解它并且可以用手。

【问题讨论】:

  • 除非您显示示例表和您期望的结果,否则很难为您提供帮助。建议您添加。
  • 用户内连接,并确保比较已传递给另一个表的主键,如外键
  • 能发两张表结构还是发表截图?
  • 大家好,这只是问题的一个简单示例,因为我知道我错过了一个基本场景,而不是实际场景。

标签: sql join union


【解决方案1】:

您需要使用条件聚合但不要在GROUP BY列中使用datekey,如下所示:

SELECT a.account_name, s.client_id,
       SUM(CASE WHEN s.date_key >= 2019 AND s.date_key < 2020 
                THEN s.revenue 
            END) AS "Revenue 2019",
       SUM(CASE WHEN s.date_key >= 2018 AND s.date_key < 2019 
                THEN s.revenue 
           END) AS "Revenue 2018"
FROM spreadsheet AS s
LEFT JOIN account_file AS a 
    ON s.client_id = a.client_id
WHERE s.date_key >= 2018 AND s.date_key < 2020
GROUP BY a.account_name, s.client_id

【讨论】:

  • 谢谢 Tejash,这正是我需要的基础。
  • 如果它解决了您的问题,您应该接受此答案,以便将此问题标记为已解决。
  • 不@Parfait,您的答案显然是错误的。请参阅您答案的分组。
  • 啊,是的!没听懂。可能有数据,我会看得更好。此外,如果 OP 想扩展到其他年份,您的解决方案中可能不需要WHERE
  • 是的,这取决于 OP。
【解决方案2】:

考虑条件聚合,将 WHERE 条件移动到多列的 CASE 语句。也请留意Bad habits to kick : using table aliases like (a, b, c) or (t1, t2, t3)

SELECT a.account_name
       , s.client_id
       , SUM(CASE 
                  WHEN s.date_key >= 2019 AND s.date_key < 2020 
                  THEN s.revenue 
             END) AS "Revenue 2019"
       , SUM(CASE
                  WHEN s.date_key >= 2018 AND s.date_key < 2019 
                  THEN s.revenue 
             END) AS "Revenue 2018"
       ... 

FROM spreadsheet AS s
LEFT JOIN account_file AS a 
    ON s.client_id = a.client_id
GROUP BY a.account_name
         , s.client_id

【讨论】:

  • 感谢 Parfait,这非常好,也感谢您提供 Bad Habits 链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
相关资源
最近更新 更多