Субконсультация в MySQL - PullRequest
0 голосов
/ 06 марта 2020

Как сделать этот подзапрос Я начал делать это с IN, но я исследовал и изменил его на INNER JOIN, но это все равно делает меня не так.

SELECT DISTINCT
    TIMESTAMPDIFF (YEAR, date_nac, CURDATE ()) AS age 
FROM patient 
WHERE date_nac 
INNER JOIN (
    select count(patient id) as Quantity 
    from patient 
    group by age 
    order by Quantity desc limit 6
);

Покажите мне эту ошибку:

Код ошибки: 1235. Эта версия MariaDB еще не поддерживает подзапрос «LIMIT & IN / ALL / ANY / SOME»

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Вы можете просто использовать агрегацию:

select
    timestampdiff(year, date_nac, current_date) age,
    count(distinct patient_id) no_patients
from patient
group by age
order by no_patients desc

Если в таблице patient нет повторяющихся patient_id s (как и должно быть), вы можете использовать count(*) вместо более дорогой count(distinct patient_id).

Я предполагаю, что вы хотите, чтобы вам были нужны только 6 самых популярных возрастов: если это так, вы можете просто добавить limit 6 t в конец запроса.

0 голосов
/ 06 марта 2020

Предполагая, что ваш синтаксис для вычисления возраста правильный, вы можете использовать что-то вроде этого:

Select age, count(age)
From
(SELECT  distinct patient_id, TIMESTAMPDIFF(YEAR, date_nac, CURDATE ()) AS age 
FROM patient
) a
Group by age;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...