【问题标题】:Add a summary column with totals添加包含总计的汇总列
【发布时间】:2021-05-19 04:34:12
【问题描述】:

我想使用 SQL 从表 (a) 中的原始数据进行查询并将总计的汇总列添加到单个表 (b)。

请参考示例。表b是我想要的查询结果。

有人可以帮忙吗?谢谢。

【问题讨论】:

  • 您使用的是哪个 dbms?
  • 这里的大多数人都希望样本表数据和预期结果为格式化文本,而不是图像或指向它们的链接。
  • 嗨 jarlh,我正在使用 HiveSql
  • 存储从表数据计算的值通常是个坏主意。很容易得到不一致的数据。 (例如,有人更新表 a,但忘记更新表 b。)视图和计算列更安全。
  • 嗨 jarlh,如果我只想对表 b 中显示的单个表中的结果执行查询。你有什么想法吗?

标签: sql hive aggregation


【解决方案1】:

尝试使用Join,根据您的示例,我们称之为test

Select table1.user, table1.restaurant, table1.spendings, table2.total_spendings
FROM
    (
        SELECT user, restaurant, sum(spending) AS spendings
        FROM test
        GROUP BY user, restaurant
    ) table1
JOIN
    (
        SELECT user, sum(spending) AS total_spendings
        FROM test
        GROUP BY user
    ) table2
ON table1.user = table2.user;

【讨论】:

    【解决方案2】:

    尝试创建一个视图(虚拟表) - 创建视图的代码

    CREATE VIEW VIEW_NAME
    AS SELECT COUNT(*)
    FROM TABLE_A;
    

    【讨论】:

    • 视图可能是个好主意,但您的视图不会返回预期的结果。它需要一个列名来计数。
    【解决方案3】:

    你想要窗口函数:

    select user, restaurant, sum(spending) as spending,
           sum(sum(spending)) over () as total_spending
    from t
    group by user, restaurant;
    

    如果要将其插入到新表中,可以使用 create table asinsert

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 2019-06-01
      • 2020-01-02
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多