Re: Query help

Поиск
Список
Период
Сортировка
От John W Higgins
Тема Re: Query help
Дата
Msg-id CAPhAwGzA3ZOcfkeXBH7t-H5xBU4PuPAWwpfKLEGotSyQp58dkw@mail.gmail.com
обсуждение исходный текст
Ответ на Query help  (Chuck Martin <clmartin@theombudsman.com>)
Ответы Re: Query help  (Adrian Klaver <adrian.klaver@aklaver.com>)
Список pgsql-general
On Tue, Jan 1, 2019 at 11:06 AM Chuck Martin <clmartin@theombudsman.com> wrote:
Sorry if this is too basic a question for this list, but I don't fully get how to use aggregates (sum()) and group-by together. I'm trying to get a list of transactions where the total for a given account exceeds a given number. I'm not sure an example is needed, but if so, consider this simplified data:

accountid.   name
1                  bill
2.                 james
3                  sarah
4                  carl

transaction
id.         amount.      accountid.     name
1.          50.              1                   bill
2.          25.              2                   james
3           35               4                   carl 
4.          75.              1                   bill
5           25.              1                   bill
6           50               3                   sarah

results wanted-all transactions where account total >= 50

id.         amount.      accountid.    name
1.          50.              1                   bill
3.          75.              1                   bill
4           25.              1                   bill
5           50               3                   sarah


You have 2 concepts here - identify the accounts with a total over 50 and then show the transactions for those accounts. I prefer CTEs here because they allow for better understanding (to me) of the steps involved. A subquery would work here as well.

with accounts_over_total as (
select accountid from transactions where sum(amount) >= 50 group by accountid)
select transactions.* from transactions join accounts_over_total on transactions.accountid = accounts.accountid

John
 
I've tried to understand how to use GROUP BY and HAVING, but the penny won't drop. I keep getting errors saying that all columns in the SELECT have to also be in the GROUP BY, but nothing I've done seems to produce the correct results. I think because the GROUP BY contains multiple columns, so each row is treated as a group. It also is difficult to parse out since in the real world, many more tables and columns are involved. 
   
Chuck Martin
Avondale Software

В списке pgsql-general по дате отправления:

Предыдущее
От: Scot Kreienkamp
Дата:
Сообщение: RE: Query help
Следующее
От: "David G. Johnston"
Дата:
Сообщение: Query help