Pomimo użycia DISTINCT dostaje powtórzone wiersze

0

Wprowadzając takie zapytanie:

 SELECT DISTINCT p.Prod_id,  p.nazwa,  t.wartość_sprzedaży AS "Wartość sprzedaży" FROM produkty p, transakcje t WHERE p.prod_id = t.prod_id AND t.wartość_sprzedaży > 1000;

Tak czy siak otrzymuje powtórzenie wierszy (prod_id = 1 wystepuje 2 razy)

0

Bo distinct działa dla całego wiersza a nie dla poszczególnych jego wartości.

0

W jaki sposób można to zrobić?

0
  1. jakie masz dane
  2. co dostajesz
  3. co chcesz dostać

mamy ci z fusów wywróżyć?

0

Mam pobrać liste sprzedanych produktów powyzej 1000 zł, bez powtórzen.
Wszystkie kolumny są w zapytaniu.
są dwie tabele transakcje i produkty.
Tabele można łączyć po Prod_id.
Nazwa jest w produktach
Wartosc_sprzedazy w transakcjach.

Otrzymuje kolumny Prod_id,nazwa,wartosc_sprzedazy:
1 taka sama nazwa rozna
4 inna rozna
5 inna rozna
1 taka sama nazwa rozna

1

W takim razie zrobileś to zupełnie źle.

SELECT p.Prod_id,  p.nazwa,  sum(t.wartość_sprzedaży) AS "Wartość sprzedaży" FROM produkty as p inner join transakcje as t on p.prod_id = t.prod_id 
group by p.Prod_id
having sum(t.wartość_sprzedaży) > 1000

Bo rozumiem że chodzi o produkty których sumarycznie sprzedano za więcej niż 1000zł? A nie w jednej transakcji? ;]

0

Ok teraz działa, wcześniej tak próbowałem bez Havinga.
Trzeba było dodać jeszcze po GROUP BY p.nazwa
Inaczej wyrzucał wiadomość że to nie jest GROUP BY.

Chodzi właśnie o jedną transakcje

0

No ale teraz to przecież liczy sumaryczną wartość sprzedaży...

0

Podałem całą treść zadania, może jednak chodzi o sumę?

0

Jeżeli chcesz, aby filtrowanie było na poziomie każdego wiersza, a nie agregaty, to daj "WHERE t.wartość_sprzedaży > 1000" zamiast "HAVING SUM(t.wartość_sprzedaży) > 1000" (przed GROUP BY).

1 użytkowników online, w tym zalogowanych: 0, gości: 1