Sql 按年龄范围和性别汇总销售额、交易数量,以获得数据轴

Sql 按年龄范围和性别汇总销售额、交易数量,以获得数据轴,sql,oracle,Sql,Oracle,我试图再添加两列,即交易计数和总销售额。我的桌子应该是这样的: 您想扩展条件聚合。您当前的计数似乎是事务计数,除非它在表中是一个单独的列 查询如下所示: SELECT CASE WHEN age BETWEEN 1 AND 25 THEN '1-25' WHEN age BETWEEN 26 AND 35 THEN '26-35' WHEN age BETWEEN 36 AND 45 THEN '36-45' WHEN age BETWEEN 4

我试图再添加两列,即交易计数和总销售额。我的桌子应该是这样的:


您想扩展条件聚合。您当前的计数似乎是事务计数,除非它在表中是一个单独的列

查询如下所示:

 SELECT CASE 
     WHEN age BETWEEN 1 AND 25 THEN '1-25' 
     WHEN age BETWEEN 26 AND 35 THEN '26-35' 
     WHEN age BETWEEN 36 AND 45 THEN '36-45' 
     WHEN age BETWEEN 46 AND 55 THEN '46-55' 
     WHEN age >= 56 THEN '56+' 
   END  AS Age_Range, 
   Sum(CASE 
         WHEN gender = 'Male' THEN 1 
         ELSE 0 
       END) AS "M Count", 
   Sum(CASE 
         WHEN gender = 'Female' THEN 1 
         ELSE 0 
       END) AS "F Count", 
   Sum(CASE 
         WHEN gender = 'Unk' THEN 1 
         ELSE 0 
       END) AS "Unk Count" 
FROM   dm_owner.v_individualbrand 
WHERE  Trunc(txn_date) BETWEEN '01-JAN-18' AND '31-DEC-18' 
   AND brandcode = 'HT' 
GROUP  BY CASE 
        WHEN age BETWEEN 1 AND 25 THEN '1-25' 
        WHEN age BETWEEN 26 AND 35 THEN '26-35' 
        WHEN age BETWEEN 36 AND 45 THEN '36-45' 
        WHEN age BETWEEN 46 AND 55 THEN '46-55' 
        WHEN age >= 56 THEN '56+' 
      END 
 ORDER  BY age_range; 
选择(年龄在1到25岁之间的情况,然后选择“1-25”
当年龄在26-35岁之间时,则为“26-35”
当年龄在36-45岁之间时,则为“36-45”
当年龄在46-55岁之间时,则为“46-55”
当年龄大于等于56岁时,则为“56岁以上”
结束)随着年龄的增长,
总和(当性别=男性时,则为1,否则为0结束)为“M计数”,
总和(当性别为“男性”时,则销售额为0)为“M销售额”,
总和(当性别=女性时,则为1,否则为0结束)为“F计数”,
总和(如果性别为“女性”,则销售额为0结束)为“F销售额”,
求和(当性别='Unk'时,则为1,否则为0结束)为“Unk计数”
总和(当性别='Unk'然后销售0结束时的情况)为“Unk销售”
来自dm_owner.v_individualbrand
其中txn_日期>=日期“2018-01-01”和
txn_日期<日期'2019-01-01'和
品牌代码='HT'
分组(年龄在1-25岁时,则为“1-25”)
当年龄在26-35岁之间时,则为“26-35”
当年龄在36-45岁之间时,则为“36-45”
当年龄在46-55岁之间时,则为“46-55”
当年龄大于等于56岁时,则为“56岁以上”
(完)
按最小值(年龄)排序;

请显示您的表的外观和示例数据。因此,您只需重复现有的
sum()
调用,但将其中一个更改为
count()
,另一个更改为对销售金额进行求和,而不是现在的固定
1
?您在更改代码以获得这些结果时遇到了什么问题?很抱歉,这是我第一次使用此论坛,我不确定它是如何工作的@亚历克斯普尔:我的个人数量正在膨胀。在添加txns的销售额和数量之前,个人总数为720万,在修订后的查询中,男性、女性和unk总数的个人总数增加到5200万。这是查询I的更改:计数(当性别描述为“男性”时,则为1结尾)为“M计数”,总和(当性别描述=‘男性’然后美元价值(us ELSE 0 END)为“M Sales”时,我有一个单独的交易编号列,我试图获得所有不同交易编号的计数。我使用了您的代码并将其膨胀为我的编号:(当我使用此查询时,个人总数为720万人,个人数量增至52人million@SomiyaL…这应该返回与您得到的计数相同的计数。您的查询(大概)是对事务进行计数,这也是。
SELECT (CASE WHEN age BETWEEN 1 AND 25 THEN '1-25' 
             WHEN age BETWEEN 26 AND 35 THEN '26-35' 
             WHEN age BETWEEN 36 AND 45 THEN '36-45' 
             WHEN age BETWEEN 46 AND 55 THEN '46-55' 
             WHEN age >= 56 THEN '56+' 
        END) as Age_Range, 
       Sum(CASE WHEN gender = 'Male' THEN 1 ELSE 0 END) AS "M Count",
       Sum(CASE WHEN gender = 'Male' THEN sales ELSE 0 END) AS "M Sales",
       Sum(CASE WHEN gender = 'Female' THEN 1 ELSE 0 END) AS "F Count", 
       Sum(CASE WHEN gender = 'Female' THEN sales ELSE 0 END) AS "F Sales", 
       Sum(CASE WHEN gender = 'Unk' THEN 1 ELSE 0 END) AS "Unk Count" 
       Sum(CASE WHEN gender = 'Unk' THEN sales ELSE 0 END) AS "Unk Sales" 
FROM dm_owner.v_individualbrand 
WHERE txn_date >= DATE '2018-01-01' AND
      txn_date < DATE '2019-01-01' AND
      brandcode = 'HT' 
GROUP BY (CASE WHEN age BETWEEN 1 AND 25 THEN '1-25' 
               WHEN age BETWEEN 26 AND 35 THEN '26-35' 
               WHEN age BETWEEN 36 AND 45 THEN '36-45' 
               WHEN age BETWEEN 46 AND 55 THEN '46-55' 
               WHEN age >= 56 THEN '56+' 
          END)
ORDER BY MIN(age);