How to get second highest value among multiple columns in SQL(如何在SQL中的多列中获得第二高的值)
问题描述
我有一些像下面这样的数据
I have some data like below
Name Flag1 Flag2 Flag3 Flag4
Jason 500 400 200 100
Mark 400 299 250 183
Tom 932 331 283 844
我能够通过编写
Max = CASE WHEN flag1>flag2 AND flag1>flag3 AND flag1>flag4 THEN 'flag1'
WHEN flag1<flag2 AND flag2>flag3 AND flag2>flag4 THEN 'flag2'
WHEN flag1<flag3 AND flag2<flag3 AND flag3>flag4 THEN 'flag3'
WHEN flag1<flag4 AND flag2<flag4 AND flag3<flag4 THEN 'flag4'END
您能帮我找到 Flag1-Flag4 中的第二大值吗?例如,Jason 的第二大应该是 flag2
Could you please help me with finding the second largest value within Flag1-Flag4? For example, the 2nd largest for Jason should be flag2
先谢谢你!
推荐答案
您可以对数据进行逆透视,然后进行如下查询
You can unpivot your data then make the query as below
SELECT name,flags,flag FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY name ORDER BY flag DESC) rn,*
FROM
(
SELECT name, flag, flags
FROM
(
SELECT 'json' name, 500 flag1,400 flag2,200 flag3, 100 flag4
UNION ALL
SELECT 'Mark' name, 400 flag1,299 flag2,250 flag3, 183 flag4
UNION ALL
SELECT 'Tom' name, 932 flag1,331 flag2,283 flag3, 844 flag4
) AS cp
UNPIVOT
(
flag FOR flags IN (flag1, flag2, flag3, flag4)
) AS up
)x
)y
WHERE rn=2
附言在查询的中间,我只是用一堆选择和联合来模拟你的数据
p.s. In the middle of the query I just simulate your data with bunch of selects and union all
p,s 你也可以通过这个查询得到第一个金额,看rn = 2
p,s Also you can get the first amount by this query too, look at rn = 2
这篇关于如何在SQL中的多列中获得第二高的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在SQL中的多列中获得第二高的值
基础教程推荐
- 带更新的 sqlite CTE 2022-01-01
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- 带有WHERE子句的LAG()函数 2022-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
- 从字符串 TSQL 中获取数字 2021-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
