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 限制,但添加了更多行的主要内容,如果未能解决你的问题,请参考以下文章

向 jquery 自动完成添加更多行

将两个行值放入一列,将另一行值放入另一列,可以将更多行值添加到列中

Oracle - 实现MySQL的limit功能

如何限制 MySQL 用户对行执行更新或删除? [复制]

我想通过附近的过滤器和距离的限制从mysql数据库中获取行

php 事件日历(TEC)和事件聚合器(EA):添加更多未来的导入限制。