首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择case语句添加信息

选择case语句添加信息
EN

Stack Overflow用户
提问于 2016-12-27 12:26:43
回答 2查看 47关注 0票数 0

我有两张桌子,纸制信息和工资。在我的发言中,我加入了CONT_ID。

代码语言:javascript
复制
 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);       

下面显示了以下的前2列:

代码语言:javascript
复制
 AGE_RANGE          NUM      GENDER      
---------+---------+----------------
18-29              828        50%        
30-49             2510        ??         
50-69             2014        ??         
70-100             649                

我想从表中添加性别参数(0或1)。然而,这是行不通的:

代码语言:javascript
复制
CASE WHEN GENDER = '1' THEN 1 ELSE 0 END / COUNT(DISTINCT c.CONT_ID)  

sqlcode= -122

我试着找出交易的平均值:

代码语言:javascript
复制
SUM(ACAUREQ_AUREQ_TX_DT_TTLAMT) / COUNT(*) 'TOTAL-Amount Avg' 

不幸的是,这会给我一个错误。

金额如下:

代码语言:javascript
复制
  SUM(ACAUREQ_AUREQ_TX_DT_TTLAMT)
    -----+---------+---------+---------+
    +1.232071426000000000000000E+0007   
    +3.062581021000000000000000E+0007   
    +2.399951792000000000000000E+0007   
    +8.228919170000000000000000E+0006   
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-27 12:35:37

我会将原始查询打包到派生表中,以保存一些类型:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2016-12-27 12:30:28

您需要将gender包含在group by中,或者将其作为聚合函数的参数:

代码语言:javascript
复制
SUM(CASE WHEN GENDER = '1' THEN 1 ELSE 0 END) / COUNT(DISTINCT c.CONT_ID)

但是,您可能不需要COUNT(DISTINCT)。如果没有必要,可以将其简化为:

代码语言:javascript
复制
AVG(CASE WHEN GENDER = '1' THEN 1.0 ELSE 0 END)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41345205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档