gpt4 book ai didi

mysql - 如何在mysql表中选择最大值行

转载 作者:IT老高 更新时间:2023-10-28 23:56:23 25 4
gpt4 key购买 nike

我有下表

表结构:

CREATE TABLE IF NOT EXISTS `people` ( 
`name` varchar(10) NOT NULL,
`age` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

插入一些值:

INSERT INTO `people` (`name`, `age`) VALUES 
('bob', 13),
('john', 25),
('steve', 8),
('sue', 13);

执行的查询:

SELECT MAX(  `age` ) ,  `name` FROM  `people` WHERE 1

预期结果:

25, John

生成的结果

25, bob

我们可以通过使用这个查询来实现这一点

SELECT `age`,  `name` FROM  `people` ORDER BY age DESC LIMIT 1

问题一:我这里犯了什么错误,为什么这个MAX函数没有返回相关的行信息?

问题2:MAX函数和ORDER BY子句哪个好用?

最佳答案

Question 1 : What I made mistake here and why this MAX function is not return the relevant row information?

您需要阅读 group by 子句。

MySQL 比它应该的更加宽松,在这个过程中引入了困惑。基本上,任何没有聚合的列都应该包含在 group by 子句中。但是 MySQL 语法糖允许“忘记”列。当你这样做时,MySQL 会从它分组所依据的集合中吐出一个任意值。在您的例子中,集合中的第一行是 bob,因此它会返回它。

Question 2: Which one is good to use, to increase performance MAX function or ORDER BY clause?

您的第一个陈述(使用 max() 而没有 group by)完全不正确。

如果您想要最老的用户之一,order by age desc limit 1 是正确的处理方式。

如果你想要所有最老的用户,你需要一个子选择:

SELECT p.* FROM people p WHERE p.age = (select max(subp.age) from people subp);

关于mysql - 如何在mysql表中选择最大值行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17318429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com