ich eine Tabelle wie folgt aus:Erhalten gängigste Wert für jeden Wert einer anderen Spalte in SQL
Column | Type | Modifiers
---------+------+-----------
country | text |
food_id | int |
eaten | date |
Und für jedes Land, ich möchte das Essen bekommen, die am häufigsten gegessen wird. Das Beste, was ich mir vorstellen kann (ich bin mit Postgres) ist:
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() nötig sind, um Bindungen zu brechen, wo zwei verschiedene Lebensmittel die gleiche Anzahl haben.
Dies scheint wie viel Arbeit für etwas konzeptionell einfach. Gibt es einen einfacheren Weg, es zu tun?
ich Interesse hätte, den Plan für diese Ausführung gegenüber der temporären Tabelle zu sehen - diese „mit“ Klauseln ausgewertet Reihen _after_ wählen abruft passende , Recht? Scheint so, als könnte es eine Bootsladung von extra IO geben. –
Es gibt ein paar vollständige Tabellen-Scans im Plan, ja. – JosephStyons