Mysql 限制,但添加了更多行
Posted
技术标签:
【中文标题】Mysql 限制,但添加了更多行【英文标题】:Mysql limit, but with adding some more rows 【发布时间】:2016-12-12 18:15:44 【问题描述】:我有这张桌子:
name | age
John | 35
Amanda | 34
Jane | 34
Jack | 34
Craig | 32
Jason | 32
Phil | 32
Kris | 32
Tyler | 25
Harry | 25
Duke | 24
我想按年龄 desc 排序并选择前五行。但如果有更多与第 5 行相同年龄的人,我也希望他们出现在我的结果中。类似于:(SELECT * FROM people ORDER BY age DESC LIMIT 0, 5 as W) UNION (SELECT * FROM people WHERE age = W[4].age
)
所以上面例子的结果是:
John | 35
Amanda | 34
Jane | 34
Jack | 34
Craig | 32
Jason | 32
Phil | 32
Kris | 32
约翰、阿曼达、简、杰克、克雷格在结果中,因为有前五个最老的
Jason、Phil、Kris 出现在结果中,因为他们与第五排的年龄相同
有什么办法吗?非常感谢
【问题讨论】:
【参考方案1】:DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(name VARCHAR(12) NOT NULL PRIMARY KEY
,age INT NOT NULL)
;
INSERT INTO my_table VALUES
('John' ,35),
('Amanda' ,34),
('Jane' ,34),
('Jack' ,34),
('Craig' ,32),
('Jason' ,32),
('Phil' ,32),
('Kris' ,32),
('Tyler' ,25),
('Harry' ,25),
('Duke' ,24);
SELECT DISTINCT y.*
FROM
( SELECT *
FROM my_table
ORDER
BY age DESC
LIMIT 5
) x
JOIN my_table y
ON y.age = x.age;
+--------+-----+
| name | age |
+--------+-----+
| John | 35 |
| Amanda | 34 |
| Jane | 34 |
| Jack | 34 |
| Craig | 32 |
| Jason | 32 |
| Phil | 32 |
| Kris | 32 |
+--------+-----+
SQL DEMO
【讨论】:
你用什么来格式化表格?我用的那个现在离线了 @JuanCarlosOropeza 我只使用我的命令行界面和 TextPad。【参考方案2】:如果你尝试一下会怎样
SELECT * FROM people
WHERE Age IN (SELECT DISTINCT Age FROM people ORDER BY Age DESC LIMIT 5)
【讨论】:
@JuanCarlosOropeza,是的,有道理【参考方案3】:您必须使用内部查询来选择前 5 个年龄,然后倒序选择最后一个。
使用Limit 4, 1
跳过前4个并选择最后一个
SQL DEMO
SELECT *
FROM (SELECT *
FROM people
ORDER BY age DESC
LIMIT 5 ) as w
UNION
SELECT *
FROM people
WHERE age = (SELECT age
FROM Table1
ORDER BY `age` DESC
LIMIT 4, 1)
输出
【讨论】:
@Strawberry 我敢打赌,仍在寻找解决方法,但尚未找到。 :(随时发布另一个答案 @Strawberry 不确定LIMIT
如何使用两个参数可能是 LIMIT 4, 5
?
@Strawberry 不,你是对的,让我检查文档LIMIT 4, 1
跳过 4 并选择最后一个
输出是我唯一不喜欢 rextester 的地方 - 哦,还有右边那个烦人的广告。
@Strawberry 对于输出,我使用snag it
,所以只是复制粘贴,广告不会让我很困扰,我的右眼视力有限。以上是关于Mysql 限制,但添加了更多行的主要内容,如果未能解决你的问题,请参考以下文章