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);