首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL中具有相加值的Case when语句

SQL中具有相加值的Case when语句
EN

Stack Overflow用户
提问于 2019-05-20 22:09:20
回答 1查看 29关注 0票数 1

我有一个包含两列的数据集。我想将其中一列分类为bin,然后将每个bin中另一列的值相加。

我已经尝试了以下代码

代码语言:javascript
运行
复制
select DISTINCT (
     CASE WHEN H=1 THEN '1'
     WHEN H BETWEEN 2 AND 3 THEN '2-3' 
     WHEN H BETWEEN 4 AND 6 THEN '4-6'
     ELSE '' END
) AS H , sum(V) [V]
from
  TABLE1 inner join TABLE 2 on TABLE1.X=TABLE2.X
where 
  TABLE.X=1 and Y='id' 
GROUP BY H
ORDER BY H ASC

下表给出了我的数据示例(其中H和V是标题)

代码语言:javascript
运行
复制
H      V
1      100
1      1000
1      1500
2      300
3      500
4      9000
5       800
6      1100

我想要的输出是

代码语言:javascript
运行
复制
H          V
1          2600
2 TO 3     800
4 TO 6     10900

然而,我正在得到(即。重复的柱状图,因为V列没有在每个柱状图中的所有值之间求和)

代码语言:javascript
运行
复制
H   V
1   100
1   1000
1   1500
2-3 300
2-3 500
4-6 9000
4-6 800
4-6 1100
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-20 22:11:47

您似乎希望对计算列进行聚合:

代码语言:javascript
运行
复制
select (CASE WHEN H = 1 THEN '1'
             WHEN H BETWEEN 2 AND 3 THEN '2-3'
             WHEN H BETWEEN 4 AND 6 THEN '4-6'
             ELSE ''
        END) AS H , sum(V) as V
from TABLE1 inner join
     TABLE2
     on TABLE1.X = TABLE2.X
where TABLE.X = 1 and Y = 'id'
GROUP BY (CASE WHEN H = 1 THEN '1'
               WHEN H BETWEEN 2 AND 3 THEN '2-3'
               WHEN H BETWEEN 4 AND 6 THEN '4-6'
               ELSE ''
          END)
ORDER BY MIN(H) ASC;

您应该限定查询中的所有列引用。

SELECT DISTINCT几乎从来都不适合GROUP BY

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56222689

复制
相关文章

相似问题

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