Как сравнить атрибуты той же таблицы и SELECT на основе этого MYSQL - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь взять все таблицы классов, в которых больше учеников, чем мужчин, и женщин, и перечислить их

Я пытался сделать это так, как я покажу в коде

SELECT S.SID
FROM CLASS C, STUDENT S,
(SELECT COUNT(*)
FROM CLASS C, STUDENT S
WHERE S.GENDER = 'M') AS S(M),
(SELECT COUNT(*)
FROM CLASS C, STUDENT S
WHERE S.GENDER = 'F') AS S1(F)
WHERE S.ClassNo = C.ClassNumber AND S(M) > S1(F)

Я пробовал это несколькими другими способами, в том числе помещая операторы select count в место 'where'. Я могу поместить операторы SELECT count отдельно от большого оператора, и он покажет правильные значения, но для сравнения он не работает, поэтому я предполагаю, что это связано с тем, как они сравниваются. Я ожидаю, что выходные данные покажут все классы, в которых больше мальчиков, чем женщин.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Просто используйте агрегацию:

SELECT S.CLASSNO
FROM STUDENT S
GROUP BY S.CLASSNO
HAVING SUM(GENDER = 'M') > SUM(GENDER = 'F');

Обратите внимание, что нет необходимости использовать таблицу CLASS, поскольку номер класса находится в таблице STUDENT.

0 голосов
/ 26 июня 2019

Ваш запрос немного повсюду.Предполагая, что вы хотите получить номера классов, где мужчины> женщины:

select * from (
select c.ClassNumber, 
    sum(case when S.GENDER = 'M' then 1 else 0 end) as m,
    sum(case when S.GENDER = 'F' then 1 else 0 end) as f
from class c
join student s on s.ClassNo = C.ClassNumber
group by c.ClassNumber
) q
where m>f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...