Сравнение одного поля со средним значением того же поля, сгруппированного по другому полю в SQL - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь создать запрос, который получает имена людей, которые выше среднего роста по полу.

Я знаю, как получить средний рост каждого пола:

SELECT avg(height), gender from client group by gender

Но я не знаю, как сравнить каждого человека (в зависимости от его пола) с этим подзапросом ..

Это насколько я мог сделать:

SELECT cname 
FROM (SELECT height, cname, gender
        FROM client AS PplHeight
        HAVING (height > (SELECT avg(height) from client group by gender))) AS AboveAvg

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 03 января 2019
SELECT PplHeight.cname, PplHeight.gender, PplHeight.height
FROM 
  client AS PplHeight,
  (SELECT gender, avg(height) as avg_height from client group by gender) avg_h
WHERE PplHeight.gender = avg_h.gender
  AND PplHeight.height > avg_h.avg_height 
0 голосов
/ 03 января 2019

Вы можете присоединиться к внутреннему подзапросу по полу и росту больше.

SELECT c1.cname
       FROM client c1
            INNER JOIN (SELECT c2.gender,
                               avg(c2.height) height
                               FROM client c2
                               GROUP BY c2.gender) x
                       ON x.gender = c1.gender
                          AND x.height > c1.height;
0 голосов
/ 03 января 2019

Либо присоединиться:

select client.*
from client
join
(
  select gender, avg(height) as avg_height
  from client
  group by gender
) genders on client.gender = genders.gender and client.height > genders.avg_height;

Или использовать коррелированный подзапрос:

select *
from client
where height >
(
  select avg(height)
  from client all_clients
  where all_clients.gender = client.gender
);
0 голосов
/ 03 января 2019

вы можете попробовать подзапросы, как это:

select *
from client as c inner join
(
    SELECT avg(height) as avgh, gender
    from client
    group by gender
) as t
on c.gender = t.gender and c.height > t.avgh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...