关于下面的示例数据,它是ORDER BY Type
,但每个结果组都是ORDER BY MIN(Valu)
,没有任何聚合。
Type Valu
---- ----
B 12
B 88
B 200
B 200
A 56
A 100
A 100
C 70
C 70
因此所有类型 B 的记录都列在最前面,因为该组的记录包含最低值 (12)。然后Type A 记录因为Valu(s) 56 的记录然后Type C 记录因为Valu(s) 70 的记录。
有没有办法在 SQL 中进行这种类型的排序?
为了进一步解释,如果我以编程方式执行此操作,我可能会首先按类型对记录进行排序,然后按值降序对记录进行排序。但随后我需要根据每组第一条记录的 Valu 对记录组进行排序。
所以像这样:
SELECT Type, Valu FROM data ORDER BY Type, Valu
让我完成了大部分工作。但后来我想按最低值对组进行排序。
这可以与论坛中的“线程”帖子进行比较,其中具有相同主题的帖子被分组在一起,但这些组随后按组内最新帖子的日期排序(尽管线程论坛帖子更复杂,因为排序是按回复顺序完成的,而在我的示例中,我只想按 Valu 进行数字排序)。
有没有办法在 SQL 中做到这一点?如果没有,我需要以编程方式进行,是否至少有一个查询会产生最新记录和任何相同类型但带有 LIMIT
的记录,这样我就不必检索所有记录?如果有两个相同类型的记录,但一个具有非常低的 Valu,另一个具有不同的高 Valu,则 LIMIT 子句可能会排除具有高 Valu 的记录。
最佳答案
在子查询中获取所有类型及其最小值并重新加入表。然后你可以订购 Type-groups min Value。
SELECT
table.Type,
table.value
FROM (
SELECT
Type,
min(value) AS minValue
FROM table
GROUP BY Type
) AS sub
INNER JOIN table
ON table.Type = sub.Type
ORDER BY sub.minValue ASC, table.Type ASC, table.value ASC
关于mysql - SQL ORDER BY 但也按不同列的 MIN(又名线程)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24423328/