【问题标题】:SQL: Sums over CombinationsSQL:对组合求和
【发布时间】:2021-01-04 09:22:05
【问题描述】:

假设我有一个这样的销售表:

store_id    industry_id    cust_id    amount    gender    age
       1            100       1000       1.00       M      20
       2            100       1000       2.05       M      20
       3            100       1000       3.15       M      20
       4            200       2000       5.00       F      30
       5            200       2000       6.00       F      30

这是生成此表的代码:

CREATE TABLE t1(
    store_id int,
    industry_id int,
    cust_id int,
    amount float,
    gender char,
    age int
);
INSERT INTO t1 VALUES(1,100,1000,1.00, 'M',20);
INSERT INTO t1 VALUES(2,100,1000,2.05, 'M',20);
INSERT INTO t1 VALUES(3,100,1000,3.15, 'M',20);
INSERT INTO t1 VALUES(4,200,2000,5.00, 'F',30);
INSERT INTO t1 VALUES(5,200,2000,6.00, 'F',30);

假设我们想要找出每个年龄/性别组合所花费的总和。像这样的:

gender    age    total_amount
    M      20            6.20
    F      30           11.00

以下代码不起作用(它会引发“操作数应包含 1 列”错误):

SELECT
    ('M','F') as gender
    , (20,30) as age 
    , (SUM(CASE WHEN gender='M' AND age=20 THEN amount END)
    , SUM(CASE WHEN gender='F' AND age=30 THEN amount END)) as total_amount
FROM t1;

最好的方法是什么?

【问题讨论】:

    标签: sql group-by hive sum


    【解决方案1】:

    我们想找出每个年龄/性别组合所花费的总和

    我认为你只是想要聚合:

    select gender, age, sum(amount) total_amount
    from t1
    group by gender, age
    

    Demo on DB Fiddle

    性别 |年龄 |总金额 :----- | --: | :----------- 中号 | 20 | 6.2 F | 30 | 11

    【讨论】:

      【解决方案2】:

      使用这个:

      Select gender, age, sum(amount ) as total_amout
      from t1
      group by gender,age
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 此代码回答问题的附加上下文可提高其长期价值.
      【解决方案3】:

      可能是这样的:

      SELECT gender
             , age 
             , SUM(amount) as total_amount
      FROM t1
      where (gender = 'M' and age = 20)
            or (gender = 'F' and age = 30)
      group by gender, age
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-26
        • 2021-05-19
        • 1970-01-01
        • 1970-01-01
        • 2020-04-03
        • 2016-01-04
        • 2014-09-19
        • 1970-01-01
        相关资源
        最近更新 更多