SELECT COURSENAME
FROM COURSE C1
WHERE (1) IN
(SELECT COUNT(DISTINCT(C2.COURSEFEES))
FROM COURSE C2
WHERE C2.COURSEFEES > C1.COURSEFEES);
В чем смысл этого "ГДЕ (1) IN"?
Это неудобный способ написания:
WHERE (SELECT COUNT(DISTINCT C2.COURSEFEES)
FROM COURSE C2
WHERE C2.COURSEFEES > C1.COURSEFEES
) = 1
Это говорит о том, что плата за один курс больше, чем та, что указана в записи, или, наоборот, плата за курс является второй по величине.
Было бы проще увидеть это как:
WHERE C1.COURSEFEES = (SELECT C2.COURSEFEES
FROM COURSE C2
GROUP BY C2.COURSEFEES
ORDER BY C2.COURSEFEES DESC
LIMIT 1 OFFSET 1
)
Скобки в (1)
лишние, поэтому это может быть только 1 IN...
1 IN X
существу совпадает с X = 1
.
Поскольку запрос, который заменяет X
возвращает счет, он проверяет, равен ли счет, возвращенный коррелированным подзапросом, равным 1
Этот запрос эквивалентен, но переписан в X = 1
вместо 1 IN X
:
SELECT COURSENAME
FROM COURSE C1
WHERE (
SELECT COUNT(DISTINCT(C2.COURSEFEES))
FROM COURSE C2
WHERE C2.COURSEFEES > C1.COURSEFEES
) = 1;
Он сравнивает каждую плату за курс с другими сборами, чтобы вернуть только те, которые имеют только одну большую плату, чем та, которую мы сравниваем на данный момент, таким образом
count(distinct(..)) = 1 for c2.coursefees > c1.coursefees
Здесь WHERE (1) сравнивается с итоговым счетом из внутреннего запроса.
Если ниже внутренний запрос возвращает один 1, то внешний запрос будет извлекать выходные данные еще без вывода.
(SELECT COUNT(DISTINCT(C2.COURSEFEES))
FROM COURSE C2
WHERE C2.COURSEFEES > C1.COURSEFEES)