Erhalte den gebräuchlichsten Wert für jeden Wert einer anderen Spalte in SQL

Ich habe eine Tabelle wie diese:

 Column  | Type | Modifiers 
---------+------+-----------
 country | text | 
 food_id | int  | 
 eaten   | date | 

Und für jedes Land, ich will das Essen, das gegessen wird, am häufigsten. Die besten, die ich denken kann (ich bin mit postgres):

CREATE TEMP TABLE counts AS 
   SELECT country, food_id, count(*) as count FROM munch GROUP BY country, food_id;

CREATE TEMP TABLE max_counts AS 
   SELECT country, max(count) as max_count FROM counts GROUP BY country;

SELECT country, max(food_id) FROM counts 
   WHERE (country, count) IN (SELECT * from max_counts) GROUP BY country;

In dieser letzten Aussage, die GROUP BY und max() sind notwendig, um Bande zu brechen, in denen zwei verschiedene Nahrungsmittel haben die gleiche Anzahl.

Dies scheint wie eine Menge Arbeit für etwas, was konzeptionell einfach. Gibt es eine mehr gerade nach vorne Weg, es zu tun?

InformationsquelleAutor der Frage Martin C. Martin | 2008-12-05

Schreibe einen Kommentar