sql min函数和sqlite的其他列

时间:2019-03-22 18:29:21

标签: mysql sql sqlite

对于sqlite,我看到这样的查询返回正确的结果:

CREATE TABLE users(id INTEGER PRIMARY KEY, 
                   user_id INTEGER NOT NULL, 
                   salary INTEGER NOT NULL);
insert into users (user_id, salary) values (1, 42000);
insert into users (user_id, salary) values (2, 39000);
insert into users (user_id, salary) values (3, 50000);
sqlite> SELECT user_id, MAX(salary) FROM users;
3|50000
sqlite> SELECT user_id, MIN(salary) FROM users;
2|39000

但是例如对于mysql来说,它可以通过其他方式工作:

sql min function and other column

并返回1|50000

是sqlite扩展,还是在这种情况下是mysql错误,以及SQL实现的这种标准行为?

1 个答案:

答案 0 :(得分:3)

在SQLite中结果为 not “正确”。 SQLite扩展了其功能以支持这些类型的非标准查询。显然,这是功能的扩展,我希望它没有做。

查询是非标准的,因为SELECTid中有未聚合的列,但是该查询是聚合查询(由于MIN() / {{1} }。具有默认设置的MySQL的较新版本正确地拒绝了该查询,因为它在语法上不正确。较早版本的MySQL从任意行返回MAX()的值。对于这种特殊情况,SQLite扩展了SQL的定义,并返回与最高或最低薪水相对应的id值。

在两个数据库中,更好的方法是:

id

和:

SELECT user_id, salary as max_salary
FROM users
ORDER BY salary DESC
LIMIT 1;