你如何从mysql中选择每一行

Cor*_*ook 72 mysql

我在数据库中有一系列值,我需要拉动它来创建折线图.因为我不需要高分辨率,所以我想通过从数据库中选择每第5行来重新采样数据.

Tay*_*ese 75

SELECT * 
FROM ( 
    SELECT 
        @row := @row +1 AS rownum, [column name] 
    FROM ( 
        SELECT @row :=0) r, [table name] 
    ) ranked 
WHERE rownum % [n] = 1 
Run Code Online (Sandbox Code Playgroud)

  • @Crazometer用5替换查询中的`[n]`以获得每5行. (4认同)
  • 有人可以提供有关其工作原理的更多信息吗?例如,问题每隔第5行问一次,答案中没有提及5。 (3认同)

Owe*_*wen 52

您可以尝试使用mod 5来获取ID为5的倍数的行.(假设您有某种ID列是连续的.)

select * from table where table.id mod 5 = 0;
Run Code Online (Sandbox Code Playgroud)

  • 假设由于删除或回滚,序列中没有间隙. (14认同)
  • 这在大多数情况下都有效,但不考虑已删除的行. (3认同)
  • 一些测试简单而精彩:-) (2认同)

Bil*_*win 22

由于您说您正在使用MySQL,因此您可以使用用户变量来创建连续的行编号.您必须将它放在派生表(子查询)中.

SET @x := 0;
SELECT *
FROM (SELECT (@x:=@x+1) AS x, mt.* FROM mytable mt ORDER BY RAND()) t
WHERE x MOD 5 = 0;
Run Code Online (Sandbox Code Playgroud)

我添加ORDER BY RAND()了一个伪随机采样,而不是每次都允许无序表的每第五行都在样本中.


匿名用户尝试编辑此更改x MOD 5 = 0x MOD 5 = 1.我把它改回原来的.

对于记录,可以在该条件下使用0到4之间的任何值,并且没有理由偏好一个值而不是另一个值.


And*_*Kon 8

SET @a = 0;
SELECT * FROM t where (@a := @a + 1) % 2 = 0;
Run Code Online (Sandbox Code Playgroud)