Нужно использовать подзапрос для отображения только «нет» - PullRequest
0 голосов
/ 15 октября 2019

Как часть учебника для Uni мне сказали изменить код ниже, чтобы он отображал только «нет», используя подзапрос.

Я пытался использовать оператор выбора subquery, которыйвыбирает «нет», если оценка равна = «Максимальная оценка», однако все равно отображаются все значения.

SELECT `no`,`code`,MAX(`grade`)
    FROM take
    WHERE `no`=(SELECT `no`
        FROM take
                WHERE grade=MAX(`grade`));

Я ожидаю, что в таблице, подключенной к самой высокой оценке, будет отображаться только строка no.

Ответы [ 3 ]

0 голосов
/ 15 октября 2019

вы можете использовать join для этого требования.

 select no, code, t2.grade from taket1
 inner join 
    (select max(grade) grade from take) t2 on t2.grade = t1.grade 
0 голосов
/ 15 октября 2019

Вы, кажется, хотите:

SELECT t.no
FROM take t
WHERE t.grade = (SELECT max(t2.grade)
                 FROM take t2
                 WHERE t2.no = t.no
                );

То есть вы хотите предложение корреляции. Предложение корреляции связывает no во внутренней таблице и внешней таблице. Но сравнение на grade.

0 голосов
/ 15 октября 2019

Возможно, вам будет достаточно запроса LIMIT:

SELECT no, code, grade
FROM take
ORDER BY grade DESC
LIMIT 1;

Это будет хорошо работать, если вы когда-нибудь ожидали, что одна запись будет иметь максимальную оценку, или, если могут быть связи,вам все равно, какой галстук будет возвращен. Если вы хотите придерживаться своего подхода подзапроса, то укажите оценку, а не значение no:

SELECT no, code, grade
FROM take
WHERE grade = (SELECT MAX(grade) FROM take);
...