1

Temat: usuwanie / grupowanie powtarzających się wierszy postgresql 8.4

Witam. Wybieram sobie nazwę i ilość i potrzebuję usunać takie same wiersze, ale żeby ilość mi się sumowała. Widziałem kilka podobnych tematów, ale jakoś nie mogę tamtych rozwiązań zastosować do mojego zapytania.

SELECT 
    pp.plu AS "PLU",
    pp.name AS "NAZWA",
    bb.name AS "PROD.",
    oo.amount AS "ILOŚĆ",
    ooo.add_date AS "DATA"

FROM 
    products_product pp
    JOIN order_orderelement oo ON (pp.id = oo.product_id)
    JOIN order_order ooo ON (oo.order_id = ooo.id)
    JOIN brands_brand bb ON (pp.brand_id = bb.id)
WHERE 
    (ooo.add_date > '2013-01-01') AND (ooo.add_date < '2013-01-31')

ORDER BY pp.name;

W wyniku takiego zapytania mam np:

PLU     NAZWA   PROD.   ILOŚĆ DATA
203     Banan    Dapan   0.350  2013-01-16
203     Banan    Dapan   0.400  2013-01-04
203     Banan    Dapan   0.500  2013-01-24
203     Banan    Dapan   0.600  2013-01-03
203     Banan    Dapan   2.000  2013-01-20

NAZWA - character varying(128), ILOŚĆ - numeric (8,3)

I potrzebuję zrobić z tego 1 wiersz, ale żeby zsumowała mi się ilość, a z datą to nie wiem jak będzie prosciej - może się zachowywać tylko pierwsza, tj. abym w wyniku miał:

PLU     NAZWA   PROD.   ILOŚĆ DATA
203     Banan    Dapan   3.850  2013-01-16

Z góry dziękuję za pomoc

Ostatnio edytowany przez carlos318i (2013-03-11 09:15:07)

2

Odp: usuwanie / grupowanie powtarzających się wierszy postgresql 8.4

proszę

SELECT
    name AS "NAZWA",
    sum(amount) AS "ILOŚĆ"
FROM
    products_product
group by name
ORDER BY name;

3

Odp: usuwanie / grupowanie powtarzających się wierszy postgresql 8.4

Niestety pojawia sie błąd:

ERROR:  column "amount" must appear in the GROUP BY clause or be used in an aggregate function
LINE 3:  amount AS "ILOŚĆ"

Zaktualizowałem zapytanie w 1 poście. Wybieram w nim dane z kilku tabel. Może to powoduje błąd?

Ostatnio edytowany przez carlos318i (2013-03-11 09:24:19)

4

Odp: usuwanie / grupowanie powtarzających się wierszy postgresql 8.4

Widzę że zmieniłeś swój post o 8:15, wcześniej załączyłeś inny select
teraz musisz zrobić analogicznie

SELECT
    pp.plu AS "PLU",
    pp.name AS "NAZWA",
    bb.name AS "PROD.",
    sum(oo.amount) AS "ILOŚĆ",
    ooo.add_date AS "DATA"

FROM
    products_product pp
    JOIN order_orderelement oo ON (pp.id = oo.product_id)
    JOIN order_order ooo ON (oo.order_id = ooo.id)
    JOIN brands_brand bb ON (pp.brand_id = bb.id)
WHERE
    (ooo.add_date > '2013-01-01') AND (ooo.add_date < '2013-01-31')
group by
    pp.plu,
    pp.name,
    bb.name,
    ooo.add_date
ORDER BY pp.name;

5

Odp: usuwanie / grupowanie powtarzających się wierszy postgresql 8.4

Ok. Teraz już nie ma błędu, ale nic mi nie sumuje. Wynik jest taki sam, jak po wywołaniu zapytania z 1 posta sad

6

Odp: usuwanie / grupowanie powtarzających się wierszy postgresql 8.4

Bo masz po jednym rekordzie z zadaną nazwą i datą, usuń z części select i group by pole ooo.add_date

7

Odp: usuwanie / grupowanie powtarzających się wierszy postgresql 8.4

Dzieki wielkie! Teraz działa pięknie!