Maksymalna suma kolumny (deduplikowanie rekordów)

0

Hej,
jestem początkujący w sql. Szukałem podobnego przypadku na forum, ale nie mogłem znaleźć.

Przypadek:
http://sqlfiddle.com/#!9/4d1d26/5

Cel:
wyświetlenie 2 wierszy (tyle ile jest unikalnych product_id), w których będzie suma kolumny qty w ramach danego product_id oraz sale_id, w którym była maksymalna sprzedaż (suma).

Czyli wynik powinien być:
product_id,sale_id,qty
1,2,5
2,4,3

Żeby nie było za prosto, to w sql nie może być wyrażenia "limit", ponieważ sql idzie do Tableau, a on nie toleruje ograniczeń.

1

A funkcje okienkowe mogę być? Możesz dodać kolumnę z row number https://www.mysqltutorial.org/mysql-window-functions/mysql-row_number-function/ i wybrać tylko te co maja row number równy 1.

1

Hej,

Z sortowaniem:

SELECT product_id, sale_id, suma
FROM (
    SELECT product_id, sale_id, 
        SUM(qty) AS suma
    FROM orders 
    GROUP BY product_id, sale_id 
    ORDER BY suma DESC
    ) wynik
GROUP BY product_id

Bez sortowania:

CREATE TEMPORARY TABLE tabsuma
SELECT product_id,
    sale_id,
    SUM(qty) AS suma
FROM orders
GROUP BY product_id, sale_id;

CREATE TEMPORARY TABLE tabmax
SELECT product_id,
    MAX(suma) AS suma
FROM tabsuma
GROUP BY product_id;

SELECT product_id,
    sale_id,
    suma
FROM (
        SELECT t1.product_id,
            t2.sale_id,
            t1.suma
        FROM tabmax AS t1
            INNER JOIN tabsuma AS t2 ON t1.product_id = t2.product_id
            AND t1.suma = t2.suma
    ) wynik
GROUP BY product_id;
2

To jest prawidłowe rozwiązanie twojego problemu:
http://sqlfiddle.com/#!9/4d1d26/57

A to rozwiązanie po "Twojemu"
http://sqlfiddle.com/#!9/4d1d26/58

0

@qwerty-sql: Twoja opcja z sortowaniem wygrywa, wielkie dzięki.

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