Załóżmy, że mamy tabelę, która ma dwie kolumny, jedna kolumna zawiera nazwy niektórych osób, a druga kolumna zawiera wartości związane z każdą osobą. Jedna osoba może mieć więcej niż jedną wartość. Każda wartość ma typ numeryczny. Pytanie brzmi: chcemy wybrać 3 najlepsze wartości dla każdej osoby z tabeli. Jeśli jedna osoba ma mniej niż 3 wartości, wybieramy wszystkie wartości dla tej osoby.Jak wybrać 3 najwyższe wartości z każdej grupy w tabeli z SQL, które mają duplikaty
Problem można rozwiązać, jeśli w kwerendzie nie ma duplikatów w zapytaniu podanym w tym artykule Select top 3 values from each group in a table with SQL. Ale jeśli istnieją duplikaty, jakie jest rozwiązanie?
Na przykład, jeśli dla jednego imienia John ma on 5 wartości z nim związanych. Są 20,7,7,7,4. Muszę wrócić pary nazwa/wartość jak poniżej kolejności malejącej pod względem wartości dla każdej nazwy:
-----------+-------+
| name | value |
-----------+-------+
| John | 20 |
| John | 7 |
| John | 7 |
-----------+-------+
tylko 3 rzędy powinny być zwrócone do Jana, chociaż istnieją trzy 7s dla Jana.
Co baza danych używasz? Oznaczono to za pomocą mysql, sql-server, Oracle i hadoop. Składnia może być różna w każdej bazie danych, pod warunkiem że bardziej szczegółowe informacje będą pomocne. – Taryn
'Wybierz * z LackOfDetails Gdzie DataBaseSoftware ma wartość NULL' – Zane
Z jakimi bazami danych naprawdę chcesz to zrobić? Oracle i SQL Server obsługują zapytania analityczne, które sprawiają, że jest to bardzo proste (kiedy przyzwyczaisz się do nowej składni). MySQL może to również zrobić, ale odpowiedź jest radykalnie inna. –