| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > Запрос с группировкой |
| Автор: pelikesha 13.6.2012, 15:58 | ||
| Здравствуйте, прошу помощи в составлении SQL запроса Таблица: id_r id_p summ mark 001 001 16 2 001 002 15 3 001 003 14 4 002 001 13 3 002 002 16 3 002 003 13 5 002 004 14 3 003 001 16 5 003 002 13 4 003 003 11 5 003 004 16 3 003 005 14 4 Требуемый результат: id_r avg_summ kol 3 001 15 1 002 14 4 003 14 1 Т.е. сгруппировав по id_r, посчитать среднее значение по столбцу summ, а так же количество человек внутри этого id_r с оценкой (mark=3). Сейчас у меня реализованы лишь первые два столбца таблицы:
А вот как добавить количество строк, удовлетворяющих условию - не понимаю... Все попытки были безуспешны. Заранее благодарю за помощь! |
| Автор: Akina 13.6.2012, 16:23 | ||||
|
| Автор: Zloxa 13.6.2012, 16:24 |
count(/*distinct ?*/ case when mark=3 then id_p end) |
| Автор: pelikesha 13.6.2012, 16:51 |
| Akina, спасибо, отписал вам в ЛС... К сожалению выдало ошибку синтаксиса( Zloxa, не совсем понял вашу запись :( |
| Автор: Данкинг 13.6.2012, 16:56 |
А СУБД какая? |
| Автор: Zloxa 13.6.2012, 17:11 |
Я предположил что id_p идентифицирует человека. Вам ведь человеков нужно посчитать, а не записи оценок? ничто не указывает на то, что пара (id_r,id_p) является уникальной. По этой причине, на всякий случай, закоментировал distinct, который следует раскоментировать, если в группе по id_r может быть упомянут несколько раз один человек с оценкой равной три, но посчитаться эти несколько записей должны как одна. По этой же причине используется count а не sum. Count считает не null значения. Если условие в case не вернет истину, значение в count окажется не определенным и не будет посчитано. upd Методика, предложенная Akina посчитает оценки а не человеков. В случае, если человеки не могут быть не определены и пара (человек, оценка) в пределах группы уникальны, это значение будет совпадать с количеством человеков. |
| Автор: Akina 13.6.2012, 17:19 |
Больше так не делайте - нарвётесь на пожизненный игнор. |
| Автор: pelikesha 13.6.2012, 18:34 | ||||||
|
| Автор: Данкинг 13.6.2012, 20:31 |
Правильно, откуда там CASE всякие. |
| Автор: Akina 13.6.2012, 21:43 |
| Заменяем CASE на IIF... синтаксис - во встроенной справке |
| Автор: pelikesha 14.6.2012, 08:07 | ||
Огромное спасибо, все получилось. |