Как выбрать только максимальное значение? - PullRequest
0 голосов
/ 06 апреля 2020

Мой запрос выглядит так:

select e.cid, e.section,
sum(if(e.grade =  'd' or e.grade = 'f', 1, 0)) as count_fails,
sum(if(e.grade = 'a' or e.grade = 'b' or e.grade = 'c' , 1, 0)) as count_pass
from homework3.enrollment e
group by e.cid, e.section 
having max((count_fails/(count_fails + count_pass))*100);

Я пытаюсь вернуть только кортеж с наибольшим процентом сбоев. Приведенный выше запрос возвращает все кортежи, которые имеют значение больше 0 для имеющего условия.

Я не хочу выбирать процент ошибок, потому что это подзапрос, и у меня не может быть 3 операндов.

Просто чтобы быть абсолютно ясным, если это моя таблица, я хочу вернуть только (336,1) кортеж, но без столбцаcent_fail.

enter image description here

Спасибо!

1 Ответ

1 голос
/ 06 апреля 2020

Добавьте предложение ORDER BY с LIMIT:

select e.cid, e.section
from homework3.enrollment e
group by e.cid, e.section 
order by sum(e.grade in ('d', 'f')) / count(*) desc limit 1

Для MySql 8.0+ используйте оконную функцию rank ():

select t.cid, t.section
from (
  select cid, section,
    rank() over(order by sum(grade in ('d', 'f')) / count(*) desc) rn
  from homework3.enrollment
  group by cid, section
) t
where t.rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...