Получить наиболее распространенное значение для каждого значения другого столбца в SQL

У меня есть такая таблица:

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

И для каждой страны я хочу получить еду, которую едят чаще всего. Лучшее, что я могу придумать (я использую 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;

В последнем утверждении GROUP BY и max () необходимы для разрыва связей, когда два разных продукта имеют одинаковое количество.

Это кажется большой работой для чего-то концептуально простого. Есть ли более прямой способ сделать это?

Ответы на вопрос(9)

Ваш ответ на вопрос