|
Объясните логику запроса вида having + константа
|
|||
---|---|---|---|
#18+
Есть таблица EXAM_MARKS(EXAM_ID, STUDENT_ID, SUBJ_ID, MARK, EXAM_DATE). Необходимо определить сумму полученных студентами оценок (mark), сгруппировав значения оценок по датам экзаменов и исключив те дни, когда число студентов, сдававших в течение дня экзамены, было меньше 10 В учебнике дан следующий вариант запроса Код: sql 1. 2. 3. 4. 5. 6. 7.
Не понимаю, как к запросу подсоединено условие HAVING? Обычно, это ключевое слово отсеивает группы, сформированные с помощью GROUP BY. Тут же оно почему-то употребляется с константой, никак не связанной с GROUP BY. Да и непонятен сам смысл выражения HAVING const < const. Как тут накладывается ограничение? Например, если подзапрос вернул COUNT(MARK)=5. Тогда мы имеем HAVING 10 < 5, что всегда false. Что из этого следует? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2019, 09:01 |
|
Объясните логику запроса вида having + константа
|
|||
---|---|---|---|
#18+
Dmi_tri, having это условие отсеивающее после выборки, ну и не константное условие, да и подзапрос привязывается по A.EXAM_DATE ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2019, 17:56 |
|
Объясните логику запроса вида having + константа
|
|||
---|---|---|---|
#18+
artasDmi_tri, having это условие отсеивающее после выборки да, знаю. вопрос был про синтаксическую корректность конкретного запроса. почему HAVING употреблено с константой? ведь SQL славится тем, что у него человеко читаемый синтаксис, а в данном запросе это явно нарушается. "имеющий 10 меньше, чем количество оценок" так никто не говорит. легко перестроить в человеко читаемый формат - имеющий количество оценок большее, чем 10. и тогда запрос трансформируется в такой вид: Код: sql 1. 2. 3. 4.
Запустил в воркбенч, запрос выдает тот же результат. Они абсолютно идентичны? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2019, 00:08 |
|
Объясните логику запроса вида having + константа
|
|||
---|---|---|---|
#18+
Dmi_triОни абсолютно идентичны? Да. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2019, 14:10 |
|
Объясните логику запроса вида having + константа
|
|||
---|---|---|---|
#18+
Другой пример: есть таблица Сессия(ФИО, Дисциплина, Оценка). Нужно найти студентов, которые сдали все экзамены на оценку не ниже, чем 4. Написал такой запрос: Код: sql 1. 2.
В учебнике дан ответ: Код: sql 1. 2. 3.
Вопрос: зачем использовать такой перегруженный синтаксис, если можно обойтись простейшим запросом? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2019, 19:45 |
|
Объясните логику запроса вида having + константа
|
|||
---|---|---|---|
#18+
Dmi_triВопрос: зачем использовать такой перегруженный синтаксис, если можно обойтись простейшим запросом?читай задачу Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2019, 19:55 |
|
Объясните логику запроса вида having + константа
|
|||
---|---|---|---|
#18+
Да, не заметил. Но все равно задача решается простейшим запросом Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.01.2019, 20:10 |
|
Объясните логику запроса вида having + константа
|
|||
---|---|---|---|
#18+
Dmi_triЕсть таблица EXAM_MARKS(EXAM_ID, STUDENT_ID, SUBJ_ID, MARK, EXAM_DATE). Необходимо определить сумму полученных студентами оценок (mark), сгруппировав значения оценок по датам экзаменов и исключив те дни, когда число студентов, сдававших в течение дня экзамены, было меньше 10 В учебнике дан следующий вариант запроса Код: sql 1. 2. 3. 4. 5. 6. 7.
Не понимаю, как к запросу подсоединено условие HAVING? Обычно, это ключевое слово отсеивает группы, сформированные с помощью GROUP BY. Тут же оно почему-то употребляется с константой, никак не связанной с GROUP BY. Да и непонятен сам смысл выражения HAVING const < const. Как тут накладывается ограничение? Например, если подзапрос вернул COUNT(MARK)=5. Тогда мы имеем HAVING 10 < 5, что всегда false. Что из этого следует? Тут так и есть, отсеивается группа, и не константа, а поле таблицы из формируемой группы .EXAM_DATE участвует в условии корреляции подзапрос а, то есть таким образом накладывается фильтр на группу. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2019, 03:38 |
|
|
start [/forum/topic.php?fid=47&fpage=41&tid=1829381]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 141ms |
0 / 0 |