在mysql中选择随机行

时间:2015-10-12 06:53:20

标签: mysql

我有一个名为 Mydata 的表格如下

     id        name          type
--------------------------------------------
     1         vinu            1
     2         rinu            2
     3         dilu            1
     4         raju            2
     5         manu            3
     6         saju            3
     7         ragu            3
     8         sonu            1
     9         sam             1
     10        rag             1
--------------------------------------------

我想打印交替type的记录,例如:

type = 1的第一行 第二行,类型= 2
类型= 3的第三行 第4行类型= 1
第5行类型= 2,依此类推

所需结果如下

     id            name            type
   -----------------------------------------
     1              vinu            1
     2              rinu            2
     5              manu            3
     3              dilu            1
     4              raju            2
     6              saju            3
     8              sonu            1
     7              ragu            3
     9              sam             1
     10             rag             1
 ----------------------------------------------

2 个答案:

答案 0 :(得分:2)

示例数据:

SELECT id, name, type FROM (

    SELECT
    t.*,
    @rn := IF(@prev_type = type, @rn + 1, 1) AS rownumber,
    @prev_type := type
    FROM
    t
    , (SELECT @rn := 0, @prev_type := NULL) var_init_subquery
    ORDER BY type

) sq
ORDER BY rownumber, type

查询:

| id | name | type |
|----|------|------|
|  1 | vinu |    1 |
|  4 | raju |    2 |
|  5 | manu |    3 |
|  9 |  sam |    1 |
|  2 | rinu |    2 |
|  7 | ragu |    3 |
|  8 | sonu |    1 |
|  6 | saju |    3 |
| 10 |  rag |    1 |
|  3 | dilu |    1 |

结果:

implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(10))

def loadAllTables() {
  Future { loadTable1() }
  Future { loadTable2() }
}

警告:

当你有大量数据时,不要期望这是高效的。它正在进行全表扫描。

如果您对这些变量的工作原理感兴趣,可以阅读manual entry

答案 1 :(得分:0)

这不能通过原始SQL查询来完成。提取您需要显示的行,然后通过您的应用程序对它们进行排序。

或者......您可以编写存储过程,但我不建议这样做。您将需要一个临时表和一个游标(透明地创建另一个临时表)。对于应该经常执行的查询来说太多了。