запрос содержит MAX () и MIN () со своими собственными условиями

0

В моем запросе здесь

$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";

Но я задаюсь вопросом, есть ли более эффективный способ и быстрее написать его, Like

$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 1 или DISTINCT с запросами MAX/MIN() -only?

Я ожидаю, что если в возрасте 19 или 17 лет поймать его с помощью MIN и MAX если они существуют

[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 ответ

2
Лучший ответ

MAX(CASE WHEN..) может быть вашим выходом. Кроме того, я изменил знаки равенства (если возраст больше 18 лет, вы хотите, чтобы минимальный возраст в возрасте 19 лет был равен 19 годам, а в возрасте менее 18 лет вы хотите достичь максимального возраста в возрасте от 1 до 17 лет. см. необходимость 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;

Примечание. Следующий/предыдущий возраст по 18 будет применяться только к данному id т.е. Если этот конкретный id имеет более одной записи с разным возрастом.

  • 0
    Я должен использовать LIMIT 1 из-за некоторых дублированных записей, я пробовал с LIMIT 1 и без него, но не получил никаких значений, потому что у меня WHERE age = 18 ?
  • 0
    Можете ли вы добавить примеры записей для некоторого id ?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню