Sql 选择案例语句添加信息
我有两张表,cardinfo和paytb。在我的声明中,我加入了他们的行列Sql 选择案例语句添加信息,sql,sum,db2,Sql,Sum,Db2,我有两张表,cardinfo和paytb。在我的声明中,我加入了他们的行列 select (case when age_years >= 18 and age_years < 30 then '18-29' when age_years < 50 then '30-49' when age_years < 70 then '50-69' when age_years < 100 then '
select (case when age_years >= 18 and age_years < 30 then '18-29'
when age_years < 50 then '30-49'
when age_years < 70 then '50-69'
when age_years < 100 then '70-100'
end) as age_range,
count(DISTINCT c.CONT_ID) as num,
CASE WHEN GENDER = '1' THEN 1 ELSE 0 END / COUNT(DISTINCT c.CONT_ID),
SUM(ACAUREQ_AUREQ_TX_DT_TTLAMT) / COUNT(*) 'TOTAL-Amount Avg'
from cardinfo c
left join paytb t
on c.CONT_ID = t.CONT_ID
group by (case when age_years >= 18 and age_years < 30 then '18-29'
when age_years < 50 then '30-49'
when age_years < 70 then '50-69'
when age_years < 100 then '70-100'
end)
order by min(age_years);
我想从表中添加性别参数0或1。但是,这不起作用:
CASE WHEN GENDER = '1' THEN 1 ELSE 0 END / COUNT(DISTINCT c.CONT_ID)
sqlcode=-122
我试图找到交易的平均值:
SUM(ACAUREQ_AUREQ_TX_DT_TTLAMT) / COUNT(*) 'TOTAL-Amount Avg'
不幸的是,这将给我一个DECFLOAT错误。
总数如下所示:
SUM(ACAUREQ_AUREQ_TX_DT_TTLAMT)
-----+---------+---------+---------+
+1.232071426000000000000000E+0007
+3.062581021000000000000000E+0007
+2.399951792000000000000000E+0007
+8.228919170000000000000000E+0006
您需要将性别包含在group by中,或者将其作为聚合函数的参数:
SUM(CASE WHEN GENDER = '1' THEN 1 ELSE 0 END) / COUNT(DISTINCT c.CONT_ID)
但是,您可能不需要COUNTDISTINCT。如果没有必要,您可以将其简化为:
AVG(CASE WHEN GENDER = '1' THEN 1.0 ELSE 0 END)
我将原始查询包装在一个派生表中,以保存一些键入:
select age_range,
count(DISTINCT CONT_ID) as num,
CASE WHEN GENDER = '1' THEN 1 ELSE 0 END / COUNT(DISTINCT c.CONT_ID),
SUM(ACAUREQ_AUREQ_TX_DT_TTLAMT) / COUNT(*) 'TOTAL-Amount Avg'
from
(
select (case when age_years >= 18 and age_years < 30 then '18-29'
when age_years < 50 then '30-49'
when age_years < 70 then '50-69'
when age_years < 100 then '70-100'
end) as age_range,
c.CONT_ID,
GENDER,
ACAUREQ_AUREQ_TX_DT_TTLAMT
from CARDUSR.CLIENT_INFO c
left join cardusr.sppaytb t
on c.CONT_ID = t.CONT_ID
)
group by age_range, GENDER
如果成功了,我将不得不添加更多的专栏。就像最常见的ACAUREQ_AUREQ_ENV_M_CMONNM一样——常见的商户名称。那会是什么样子?@bastel。我不知道你想要什么但SUMCASE。和AVGCASE。是一种常见的构造。
select age_range,
count(DISTINCT CONT_ID) as num,
CASE WHEN GENDER = '1' THEN 1 ELSE 0 END / COUNT(DISTINCT c.CONT_ID),
SUM(ACAUREQ_AUREQ_TX_DT_TTLAMT) / COUNT(*) 'TOTAL-Amount Avg'
from
(
select (case when age_years >= 18 and age_years < 30 then '18-29'
when age_years < 50 then '30-49'
when age_years < 70 then '50-69'
when age_years < 100 then '70-100'
end) as age_range,
c.CONT_ID,
GENDER,
ACAUREQ_AUREQ_TX_DT_TTLAMT
from CARDUSR.CLIENT_INFO c
left join cardusr.sppaytb t
on c.CONT_ID = t.CONT_ID
)
group by age_range, GENDER