【问题标题】:How to sum values if I don't have column to group it by如果我没有列分组,如何对值求和
【发布时间】:2021-11-30 03:56:30
【问题描述】:

我需要汇总按国家/地区分组的销售额,但我必须手动将它们分组,因为我没有其他方法。 不幸的是,我没有“大陆”一栏,但名单上的国家不多,所以我可以手动完成。我无法在表中创建任何新列,因此我需要在查询中创建。

例如:

country | sum of sales
Germany    1000
Italy      500
Canada     700
UK         1300
USA        3000

我想查看欧洲和北美的总销售额

continent | sum of sales
Europe          2800
North America   3700

【问题讨论】:

  • 你的问题是什么?
  • 您的国家/地区表是否有大陆列?你如何处理土耳其和俄罗斯?
  • @HoneyBadger,如何手动分组?
  • @jarlh,由于敏感日期,我更改了查询背后的逻辑。老实说,我正在使用一些名称并将它们替换为国家/地区。
  • 如果不能给表加列,能不能加个表,哪怕只是临时的?

标签: sql presto mode-analytics


【解决方案1】:

您应该能够将case 表达式和in 谓词结合起来,类似于以下内容:

SELECT CASE
    WHEN country in ('Germany', 'UK') THEN 'Europe'
    WHEN country in ('Canada', 'USA') THEN 'North America'
    END as continent,
    sum("sum of sales")
FROM table
GROUP BY 1

【讨论】:

  • 我正在 PrestoDB 中编写查询并收到以下消息:“java.sql.SQLException: [Simba][AthenaJDBC](100071) AWS Athena 客户端抛出错误。SYNTAX_ERROR : line 2:26: IN value and list items must be the same type: array(varchar) [Execution ID: 55b867bb-8e4e-483b-a91f-215dcbeb464c]"
  • 只是一个小注释:case表达式in谓词
  • @Zole72 无法复制,this 对我来说很好。
  • @jarlh 谢谢,已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
相关资源
最近更新 更多