sql - T-SQL ORDER BY 基于组列的 MIN

标签 sql sql-server-2008-r2

您好,以以下数据为例

id | value
----------
 A |   3
 A |   9
 B |   7
 B |   2
 C |   4
 C |   5

我想列出每个 id 组的最小值的所有数据库,以便预期输出为

id | value
----------
 B |   2
 B |   7
 A |   3
 A |   9
 C |   4
 C |   5

即A 组的 min 为 3,B 组为 2,C 组为 4,因此按升序先是 B 组,然后是 B 组的其余部分。接下来是 A 组,然后是 C 组

我尝试过,但这不是我想要的

SELECT * FROM (
SELECT 'A' AS id, '3' AS value
UNION SELECT 'A', '9' UNION SELECT 'B', '7' UNION SELECT 'B', '2'
UNION SELECT 'C', '4' UNION SELECT 'C', '5') data
GROUP BY id, value
ORDER BY MIN(value)

请帮忙!谢谢

最佳答案

SELECT * FROM (
SELECT 'A' AS id, '3' AS value
UNION SELECT 'A', '9' UNION SELECT 'B', '7' UNION SELECT 'B', '2'
UNION SELECT 'C', '4' UNION SELECT 'C', '5') data
ORDER BY MIN(value) OVER(PARTITION BY id), id, value

OVER Clause (Transact-SQL)

将 over() 子句添加到查询输出中,您可以看到它为您做了什么。

SELECT *, 
       MIN(value) OVER(PARTITION BY id) OrderedBy FROM (
SELECT 'A' AS id, '3' AS value
UNION SELECT 'A', '9' UNION SELECT 'B', '7' UNION SELECT 'B', '2'
UNION SELECT 'C', '4' UNION SELECT 'C', '5') data
ORDER BY MIN(value) OVER(PARTITION BY id), id, value

结果:

id   value OrderedBy
---- ----- ---------
B    2     2
B    7     2
A    3     3
A    9     3
C    4     4
C    5     4

关于sql - T-SQL ORDER BY 基于组列的 MIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23333453/

相关文章:

sql - SQL Server 2008 R2中的有效分页

mysql - 如何获取在 MYSQL 8 中列值更改之前首次出现的选择行

c# - 使用 POCO 类时,表名称映射在 EF 6 中不起作用

mysql - 从依赖于连接表的子查询中选择求和值

sql - postgres : id auto-increment with millions of rows per day. 坏了吗?

t-sql - 这可以在没有循环或游标的情况下完成吗

sql-server - 同一个表上是否有两个排他锁

c# - 将参数从 C# : Which SQLDbType to use for numeric(18, 0) 传递到存储过程

mysql - 如何计算 Oracle SQL 中从右侧开始的列中有多少个零

mysql - 使用子查询和 rand() 进行随机采样会产生意想不到的结果