Значение (n) в запросе SQL?

0
SELECT COURSENAME
FROM COURSE C1
WHERE (1) IN
(SELECT COUNT(DISTINCT(C2.COURSEFEES))
FROM COURSE C2
WHERE C2.COURSEFEES > C1.COURSEFEES);

В чем смысл этого "ГДЕ (1) IN"?

Теги:

3 ответа

5
Лучший ответ

Это неудобный способ написания:

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
                      )
3

Скобки в (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
0

Здесь WHERE (1) сравнивается с итоговым счетом из внутреннего запроса.

Если ниже внутренний запрос возвращает один 1, то внешний запрос будет извлекать выходные данные еще без вывода.

(SELECT COUNT(DISTINCT(C2.COURSEFEES))
FROM COURSE C2
WHERE C2.COURSEFEES > C1.COURSEFEES)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню