У меня есть эта таблицаPostgreSQL - Условный агрегация - Avg() в заявлении Выберите
| user | Mark | Points |
|--------------|------------|----------|
| John | 0 | 2 |
| Paul | 5 | 3 |
| John | 4 | 4 |
| Paul | 7 | 5 |
Я хотел бы построить запрос с одним оператором выбора, который возвращает строки, показанные ниже. Среднее (Mark) - должно быть средним, только если Mark> 0 Сумма (баллы) - должна быть суммой всех записей.
| user | Avg(Mark) | Sum(Points) |
|--------------|------------|-------------|
| John | 4 | 6 |
| Paul | 6 | 8 |
Может ли кто-нибудь указать на правильный синтаксис?
Я считаю, что это должно понравиться:
select user, avg(Mark>0), sum(Points) from Table group by user;
есть также возможность, как избежать деления на ноль в случае «John» имеет нулевые значения всех «Marks»? – Fridolin
Я думаю, что я отработал его (знак)/nullif (count (nullif (mark, 0)), 0) Еще раз спасибо за вашу помощь. – Fridolin