sql - 分组依据检索 3 个值

标签 sql sql-server group-by sql-function

我有以下查询

SELECT  Cod ,
        MIN(Id) AS id_Min,
        MAX(Id) AS id_Max,
        -- retrieve value in the middle,
        COUNT(*) AS Tot

FROM    Table a ( NOLOCK )        
GROUP BY Cod
HAVING  COUNT(*)=3

如何像获取最小值和最大值一样检索最小值和最大值之间的值?

示例

Cod      |  Id

Stack       10
Stack       15
Stack       11
Overflow    100
Overflow    120
Overflow    15

所需的输出

Cod         | Min   | Value_In_The_Middle  |    Max

Stack         10          11                    15
Overflow      15          100                   120

最佳答案

我还没有测试过,但我认为这会起作用

SELECT  Cod ,
        MIN(Id) AS id__Min,
        MAX(Id) AS id_Max,
        SUM(ID)-MAX(Id)-MIN(Id) as id_Middle,
        COUNT(*) AS Tot
FROM    Table a ( NOLOCK )        
GROUP BY Cod
HAVING  COUNT(*)=3

此技巧仅在您有 3 个值且 SUM() 不会溢出时才有效(如评论中指出的 Bogdan Sahlean )。

关于sql - 分组依据检索 3 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10206934/

相关文章:

更改 DATA 文件夹后 MySQL 无法启动

mysql - 如何获取 MySQL 表的创建日期?

sql - 查找在不同入职日期雇用的员工姓名

Python groupby 应用返回奇数数据帧

MySQL Left Join Right Join union 返回不正确的数据

java - JDBC 和 MySQL : Do changes in the underlying database are known to the java program?

sql - 存储过程中不寻常的 UPDATE 语法

sql - 有什么方法可以按文本列分组吗?

sql - 如何使用 'must be an aggregate expression or appear in GROUP BY clause' 子句修复 'as'

r - 聚合/Group_by R中的第二个最小值