mysql - SQL ORDER BY 但也按不同列的 MIN(又名线程)?

标签 mysql sql sorting sql-order-by

关于下面的示例数据,它是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/

相关文章:

mysql - 如何在mysql查询中对计算字段进行四舍五入

mysql - 联合选择和分组出现

python - 无法使用输入作为名称在 Python 中创建 SQL 表

python - 按对元素的频率对列表对进行排序

sorting - 在应用程序的 creationComplete (Flex 4.5) 上设置 Spark DataGrid 列的默认排序

c - 排序数组和唯一数组

MySQL - 可以显示过去时间戳的复制滞后吗?

php - DB登录后,重定向到另一个页面

php - MySql 多表还是一张大表?

MySQL - 使用 GROUP BY 和 SUM 将两列相乘