mysql - sql根据具有重复值的列选择行,但对它们进行明确的排序

标签 mysql sql-order-by distinct

我有一个包含这两列的表格

name  |  position
_______________
bob   |   1
rob   |   1
sam   |   1
tom   |   2
shyam |   2
ram   |   2
shah  |   3
sara  |   3
shiv  |   3
rogue |   4
logan |   4
xavier|   4

我需要按不同的位置排序,但不应删除重复项,最终结果必须类似于

    name  | position
    _______________
    bob   |   1
    tom   |   2
    shah  |   3
    rogue |   4
    rob   |   1
    shyam |   2
    sara  |   3
    logan |   4
    sam   |   1
    ram   |   2
    shiv  |   3
    xavier|   4

我尝试了不同的 position 以及按 position 分组,但都删除了重复项,但我希望将它们分组为行集,以便第一个副本发生然后第二个重复的行发生等。有什么建议或帮助实现它吗?

最佳答案

您需要枚举 position 每个值中的行。然后您可以使用它来订购:

select t.name, t.position
from (select t.*, if(@prev = position, @rn := @rn + 1, 1) as rn,
             @prev := position
      from t cross join
           (select @rn := 0, @prev := -1)
      order by position
     ) t
order by rn

关于mysql - sql根据具有重复值的列选择行,但对它们进行明确的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17438355/

相关文章:

php - MySQL 选择与变量关联的所有值(如果提供),或者选择所有内容(包括空)(如果未提供)

mysql - SQL : ids containing specific arrays in a specific way

Mysql 计算具有特定属性的行

sqlite - 如何从两个表中选择不同的记录,合并为一列,并使用 SQLite 消除另一个表中存在的所有记录?

SQL 从多个表中选择不同的值

php - Codeigniter - 多个数据库连接

php - 如果没有行返回那么当使用 php 和 mysql 时它是错误的

mysql - 为什么这个 INNER JOIN/ORDER BY mysql 查询这么慢?

MySQL 按数字排序,最后是 Null

sql - SQL 中的 Order by 子句执行