У меня есть такая таблица:
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() необходимы для разрыва связей, когда два разных продукта имеют одинаковое количество.
Это кажется большим объемом работы для чего-то концептуально простого. Есть ли более прямой способ сделать это?