【问题标题】:SQL: how to select randomly and order by higestSQL:如何随机选择并按最高排序
【发布时间】:2013-05-04 18:45:20
【问题描述】:

我的架构如下所示:

CREATE TABLE users 
    (
     id int auto_increment primary key, 
     name varchar(20), 
     point int(255)
    );

INSERT INTO users
(name, point)
VALUES
('Jack', 1),
('Rick', 5),
('Danny', 11),
('Anthony', 24),
('Barla', 3),
('James', 15),
('Melvin', 12),
('Orthon', 5),
('Kenny', 2),
('Smith', 30),
('Steven', 27),
('Darly', 45),
('Peter', 44),
('Parker', 66),
('Lola', 78),
('Jennifer', 94),
('Smart', 87),
('Jin', 64),
('David', 31),
('Jill', 78),
('Ken', 48),
('Martin', 19),
('Adrian', 20),
('Oliver', 16),
('Ben', 100);

我的 sql 是:

select id, name, point from users Order by point desc, rand() LIMIT 5

问题是,我的查询没有随机选择 5 行并按点排序。任何想法,如何解决它?这是sqlfiddle: http://sqlfiddle.com/#!2/18f15/1

【问题讨论】:

    标签: mysql sql random


    【解决方案1】:
    select id,name,point from
    (select id, name, point from users Order by rand()  
    LIMIT 5) abc
    order by point desc;
    

    SQLFIDDLE

    【讨论】:

      【解决方案2】:

      问题是,我的查询没有随机选择 5 行并按点排序。

      这是因为在您给定的查询中,您使用的是 ORDER BY 子句。

      <em>select id, name, point from users Order by point desc, rand() LIMIT 5</em>

      尝试删除 ORDER BY 子句中的 point desc,

      select id, name, point from users Order by rand() LIMIT 5
      

      SQL FIDDLE

      编辑

      select id,name,pont from
      (select id, name, point from users Order by rand() LIMIT 5)temp
      order by point desc
      

      注意:您的数据库中应该有名称为 tempno Table(即,因为您正在使用它 alias )

      【讨论】:

      • Order by rand() 当你有一张巨大的桌子时,这将是一个缓慢的解决方案。
      • @SaVaFa: 对 rand() 有什么建议吗?
      • @Redbox,看到这个:stackoverflow.com/questions/1823306/…
      • @SaVaFa,谢谢,但是查询太复杂了。我有 30k 行,这是我使用 rand() 的结果:显示第 0 - 27 行(总共 28 行,查询耗时 0.1296 秒)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 2011-08-27
      • 2013-06-14
      • 2016-10-03
      • 1970-01-01
      • 2016-01-18
      相关资源
      最近更新 更多