【问题标题】:SQL Order by per different valuesSQL 按不同值排序
【发布时间】:2018-08-09 14:30:23
【问题描述】:

我有一个包含列的表格:名称、类别和分数。我希望按每个类别的分数对它们进行排序,但我还需要按类别对它们进行排序,如下所示:

  1. 类别:A,得分:25(A 类最高分)
  2. 类别:B,得分:10
  3. 类别:C,得分:30
  4. 类别:A,得分:24
  5. 类别:B,得分:9
  6. 类别:C,得分:29
  7. 类别:A,得分:23 等等……

有没有办法使用 ORDER BY 对结果进行排序?或者我是否必须稍后在结果上使用自定义排序周期?谢谢!

【问题讨论】:

  • 您使用的是哪个版本的mysql?更高版本支持window functions,这可能适用于您想要实现的目标。如果使用较早的版本,您可以使用user-defined variables 来实现相同的效果。
  • 你试过ORDER BY category, score DESC吗?

标签: mysql sql sorting sql-order-by


【解决方案1】:

这应该可以解决问题。我已将 ROW_NUMBER 函数模拟为计算列(按类别分区),然后将结果排序在新列和类别之后。

SELECT a.category, a.score, (
    SELECT count(*) from tbl b where a.score <= b.score AND a.category = b.category
) AS row_number
FROM tbl a
order by row_number, category

你可以测试一下here

【讨论】:

    【解决方案2】:

    我想玩 ASC 和 DESC

    SELECT  name, category, score FROM table ORDER BY category , score DESC
    

    也许这可以帮助您(显示查询结果)。祝你好运。

    【讨论】:

      【解决方案3】:

      试试这个查询:

      select @cat := '', @rn := 0;
      select Category, Score from (
        select case when @cat = Category then @rn := @rn + 1 else @rn := 1 end rn,
               @cat := Category, 
               Category, 
               Score
        from tbl
        order by Category, Score desc
      ) a order by rn, Category
      

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-01
        • 2021-03-24
        • 2021-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多