查询包含MAX()和MIN()以及它们自己的条件

时间:2017-12-25 20:44:23

标签: mysql sql

在我的查询中

$Query = "SELECT id, name FROM names WHERE age = 18 LIMIT 1";

我想添加MIN()MAX()条件,好像我做了另一个这样的查询

$MQuery = "SELECT MAX/MIN(age) FROM names LIMIT 1";

我的解决方案是将这三个查询合并在一起

$Query = "SELECT id, name, 
(SELECT MAX(age) FROM names WHERE  age = 18 AND age > 18 LIMIT 1) as MAX, 
(SELECT MIN(age) FROM names WHERE  age = 18 AND age < 18 LIMIT 1) as MIN
FROM names WHERE age = 18 LIMIT 1";

但是我想知道是否有一种更有效的方式并且更快地编写它,比如

$Query = "SELECT id, name, 
(MAX(age) WHERE age > 18) as MAX, 
(MIN(age) WHERE age < 18) as MIN 
FROM names WHERE age = 18 LIMIT 1";

另外,是否有任何想法将LIMIT 1DISTINCTMAX/MIN()一起使用 - 仅查询?

我期望的是,如果年龄19或年龄17使用MINMAX(如果存在)

[id - name - max -min
[1 - Mario - 19 - 17]

表就像

[id - name - age]
[1  - mario - 18]
[2  - arizo - 18]
[3  - bruno - 17]
[4  - arizo - 19]
[5  - mario - 18]

1 个答案:

答案 0 :(得分:2)

MAX(CASE WHEN..)可能是您的出路。我也改变了相同的标志(如果年龄大于18岁,你想要[19岁至少]的最小年龄,并且年龄小于18岁,你想要[1到17]的最大年龄。我也不会# 39;看不出需要LIMIT 1

SELECT id, name, 
MAX(CASE WHEN age<18 THEN age END) as Max_age,
MIN(CASE WHEN age>18 THEN age END) as Min_age
FROM names
GROUP BY id, name;

注意:下一个/上个年龄w.r.t. 18仅适用于给定的id,即特定id具有多个不同年龄的条目。