|
Агрегирующая функция совместно с having или where?
|
|||
---|---|---|---|
#18+
Имеется таблица EXAM_MARKS(EXAM_ID, STUDENT_ID, SUBJ_ID, MARK, EXAM_DATE), в которой занесена информация об оценках на экзаменах. (SUBJ_ID - название предмета, смысл остальных атрибутов ясен из названия). Требуется определить количество предметов обучения с оценкой, превышающей среднее значение оценки студента с идентификатором 301. Написал следующий запрос: SELECT COUNT(subj_id) FROM exam_marks HAVING mark>(SELECT AVG(mark) FROM exam_marks GROUP BY student_id HAVING student_id=301); workbench выдает ошибку "Error code 1054: Unknown column 'mark' in 'having clause'" При замене HAVING mark на WHERE mark программа выдает результат (не знаю насколько корректный) Отсюда несколько вопросов: 1. Почему первоначальный запрос не запускается? 2. Почему второй запрос отрабатывает, ведь с агрегирующими функциями запрещено использовать where? 3. Не уверен в корректности подзапроса - SELECT AVG(mark) FROM exam_marks GROUP BY student_id. В данном случае произведена группировка по атрибуту student_id, хотя в условие выборки SELECT занесено только AVG(mark). Читал, что при группировке GROUP BY все условия группировки должны также выноситься и в SELECT. То есть, как мне кажется, корректным в данном случае было бы написать SELECT student_id, AVG(mark) FROM exam_marks GROUP BY student_id. Но в данном случае workbench выдает "Error code: 1241. Operand should contain 1 column" ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 10:36 |
|
Агрегирующая функция совместно с having или where?
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 13:26 |
|
Агрегирующая функция совместно с having или where?
|
|||
---|---|---|---|
#18+
полудух Код: sql 1. 2. 3.
будем считать, что вопрос про количество вы не заметили но! с агрегирующими функциями запрещено использовать where ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 17:40 |
|
Агрегирующая функция совместно с having или where?
|
|||
---|---|---|---|
#18+
The HAVING clause was added to SQL because the WHERE keyword could not be used with aggregate functions . (c) https://www.w3schools.com/sql/sql_having.asp ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 17:44 |
|
Агрегирующая функция совместно с having или where?
|
|||
---|---|---|---|
#18+
Dmi_tri, В предложенном вам запросе нет агрегирующей функции в секции WHERE. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 18:03 |
|
Агрегирующая функция совместно с having или where?
|
|||
---|---|---|---|
#18+
будем считать, что вы не умеете говорить спасибо. счётчик сами сумеете вставить, не всё же для вас разжёвывать. HAVING нужно понимать правильно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 18:05 |
|
|
start [/forum/topic.php?fid=47&fpage=41&tid=1829384]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 221ms |
0 / 0 |