SQL "gruppieren nach" verwenden, Priorität
Ich habe eine Tabelle, wo ich mehrere Namen für eine gegebene id so:
a_table (id int, name varchar(100), Priorität, int);
Brauche ich ein statment, dass die Suche auf Namen, aber stellen Sie sicher, es wird wieder nur 1 Namen für jedes id und name wird der sein, der mit der höheren Priorität.
z.B. wenn meine Daten sind
1, AaaB, 2 1, AbbB, 1 1, AccB, 0 2, foo, 0 3, AddC, 0
Möchte ich meine Abfrage für "A%" zurück:
1, AaaB 3, AddC
Ich dachte so etwas wie:
select * from a_table where name like 'A%' group by id;
Aber dies wird nicht garantieren, dass der Wert mit der höheren Priorität ausgewählt.
Irgendwelche Ideen?
Dank,
Stavros
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie wollen Die Zeilen Halten das gruppenweise Maximum eines Bestimmten Spalte.
priority = 0
Sie können einfach die Bedingung in einer WHERE-Klausel, und auch Gebrauch machen von einem index.Müssen Sie zuerst erhalten die höchste Priorität pro id und dann der filter auf die Namen:
Unter @niktrs gültig Vorschlag, dies ist die gleiche Abfrage unter Verwendung der standard -
JOIN
stattwhere
für das verknüpfen von Tabellen. Dies ist mehr am günstigsten gelegene gegenüber dem Vorjahr einwhere
syntax, aber Sie haben Recht.JOIN
ist mehr standardAuf der Grundlage der ersten Spalte in der Daten Beispiel ist die "Priorität".
Dies ist nur die SQL-Links von Alvaro Antwort obwohl.
würde dieser Arbeit,
select distinct id,first_value(name)over(partition by id order by name)
von demo_tab t
wo t.name like 'A%'
Sorry praktisch,
es muss
select distinct id,first_value(name)over(partition by id order by priority desc)
von demo_tab where name like 'A%'