ORDER BY изменяет результат запроса, даже если сортируемый столбец отсутствует в операторе SELECT

Я работал над некоторыми видео по Oracle PL/SQL и пришел к тому моменту, когда обсуждаемый запрос мне не совсем понятен. В частности, как результат ORDER BY предложение играть в результирующий запрос.

Глядя на эту структуру таблиц:

категория

  • category_id (PK)
  • parent_id
  • название

Шоу

  • show_id (PK)
  • category_id (FK)
  • act_id (FK)
  • venue_id (FK)
  • название
  • showdate
  • price_multiplier

И отношение 0 к 1 или много между таблицами Category и Show (так что для любой категории может быть 0 или более записей в таблице Show).

Как работает ORDER BY пункт изменить то, что достигается GROUP BY оговорка, если COUNT (DISTINCT s.show_id) не является перечисленным столбцом / полем в инструкции SELECT

Запрос:

SELECT c.name, COUNT(DISTINCT s.category_ID) "First Categories"
FROM category c, show s
WHERE c.category_id = s.category_id
GROUP BY c.name
ORDER BY COUNT (DISTINCT s.show_id);

(Это в ответ на отрицательное голосование: я хотел бы рассмотреть это в том смысле, что я искал ответ на досках до его публикации, а также за его пределами. Я чувствовал, что этот пример охватывает хорошее количество основных и важные понятия между предложениями GROUP BY, SELECT и ORDER BY и могут быть полезны для кого-то, кто только учится, поскольку это достаточно уникальный пример, но достаточно базовый для понимания и применения в будущем.)

Спасибо, милостиво!

1 ответ

Расчет COUNT (DISTINCT s.show_id) по-прежнему применяется к каждой группе c.nameи результирующие строки сортируются по нему - он просто не отображается в окончательном наборе результатов.

Другие вопросы по тегам