SQL: Как получить все строки с помощью GROUP BY

#sql #postgresql

Вопрос:

Приведем этот пример таблицы. Я хотел бы получить все строки с суммой долгов > 1000.

 TABLE_1

ID   NAME        DEBT
1    Daniel      1000
2    Daniel      10    
3    Xavier      500
4    Ricardo     600
5    Ricardo     300
6    Eduardo     2000
7    Eduardo     1000
 

Таблица результатов должна быть:

 RESULT

ID   NAME        DEBT
1    Daniel      1000
2    Daniel      10
6    Eduardo     2000
7    Eduardo     1000
 

Это потому, что долг Даниэля составляет 1010, так что он больше 1000. То же самое касается Эдуардо, чей долг составляет 3000. Важным результатом являются идентификаторы. Как я мог бы сделать этот запрос в SQL?

Комментарии:

1. Помечайте только ту базу данных, которую вы используете.

Ответ №1:

Вы можете использовать оконные функции:

 select t.*    -- or whatever columns you want
from (select t.*,
             sum(debt) over (partition by name) as sum_debt
      from t
     ) t
where sum_debt > 1000;
 

Ответ №2:

Вы можете использовать вложенный запрос.

 SELECT * FROM TABLE1 WHERE NAME IN ( SELECT NAME FROM TABLE1 GROUP BY NAME HAVING SUM(DEBT)>1000);