Ich habe eine Tabelle, Tabelle 1. In dieser Tabelle ist Name, Stadt, Preis. Die Namen sind alle einzigartig, die Städte können wiederverwendet werden. Ich möchte eine Abfrage erstellen, die mir den höchsten Preis jeder Stadt und den mit dieser Zeile verknüpften Namen gibt. Um den höchsten Preis für jede Stadt zu bekommen, mache ich nur:Gibt es eine Möglichkeit, dies in einer SELECT-Anweisung zu tun? Verwenden von Group By
SELECT MAX(price), city FROM table1 GROUP BY city
Aber ich möchte den Namen auch. Wenn ich versuche
SELECT MAX(price), city, name FROM table1 GROUP BY city
Dann bekomme ich nur einen Abfragefehler darüber, wie der Name nicht in der Gruppe enthalten ist. Wenn ich der Gruppe Namen hinzufüge, dann tut es nicht, was ich will. Ich kann mir vorstellen, wie ich das mit zwei Abfragen machen könnte, aber ich wette, es gibt einen Weg, es in nur einem zu tun. Was vermisse ich?
Ich habe ein paar ähnliche Fragen zu stackoverflow gefunden, aber alle scheinen etwas komplizierter zu tun, als ich versuche. Ich habe immer nur einfache SQL-Abfragen verwendet, so dass ich mich über einige der fortgeschritteneren Funktionen informiere.
Ja, das scheint zu mir zurück zu kommen, nicht genau zu wissen, was ich will (oder genauer, eine alte Datenbanktabelle verwendend, um einige neue Abfragen auszuprobieren). Die anderen Antworten geben mir Wiederholungen. Ich verstehe nur irgendwie, wie Ihre Abfrage funktioniert, aber an einem Tag sollte ich es haben. Thanks – cost
Ich teile die Abfrage in zwei Schritten: zuerst richte ich die durch die Stadt partitionierten Preise in der "virtuellen Tabelle" ein (der Name für dieses Konstrukt ist ein [Common Table Expression] (http://msdn.microsoft.com/en- us/library/ms190766.aspx)), so dass ich weiß, welches das teuerste Item nach seinem Rang ist ('ix'). Ich filtere danach. Wenn Sie also die ersten drei teuersten Namen pro Stadt haben wollten, könnten Sie einfach 'ix <= 3 'in der where-Klausel verwenden. Oder wenn Sie eine andere Rangfolge wünschen, verwenden Sie einfach eine andere [ranking functions] (http://msdn.microsoft.com/en-us/library/ms189798.aspx), die von SQL Server anstelle von 'ROW_NUMBER' bereitgestellt wird. – Lucero
Ich verstehe, könnte ich ein paar Fragen im Chat stellen? – cost