SQL:如何随机选择并按最高顺序排序

时间:2013-05-10 06:11:12

标签: mysql sql random

我的架构看起来像这样:

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

2 个答案:

答案 0 :(得分:7)

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

SQLFIDDLE

答案 1 :(得分:2)

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

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

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

尝试删除 ORDER BY 子句

中的点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

注意:您的数据库中应该包含名称 temp no Table (即,因为您在 alias使用它