我有这样一张桌子:
Column | Type | Modifiers
---------+------+-----------
country | text |
food_id | int |
eaten | date |
Run Code Online (Sandbox Code Playgroud)
对于每个国家,我想获得最常吃的食物.我能想到的最好的(我使用的是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;
Run Code Online (Sandbox Code Playgroud)
在最后一个陈述中,需要GROUP BY和max()来打破关系,其中两种不同的食物具有相同的数量.
对于概念上简单的事情来说,这似乎是很多工作.有没有更直接的方式来做到这一点?
我有一个包含多行的表,对于每一行我都需要知道最常见的值.
例:
row_1有
car
boat
car
car
truck
truck
plane
car
car
Run Code Online (Sandbox Code Playgroud)
作为其价值观.
我需要知道什么是最常见的价值(在这种情况下是汽车).我有几个想法,但由于我必须为30行做这个,我想要一个简单而不是CPU密集的查询.
如何获取MySQL中每个标记最常出现的类别?理想情况下,我想模拟一个计算列模式的聚合函数.
SELECT
t.tag
, s.category
FROM tags t
LEFT JOIN stuff s
USING (id)
ORDER BY tag;
+------------------+----------+
| tag | category |
+------------------+----------+
| automotive | 8 |
| ba | 8 |
| bamboo | 8 |
| bamboo | 8 |
| bamboo | 8 |
| bamboo | 8 |
| bamboo | 8 |
| bamboo | 10 |
| bamboo | 8 |
| bamboo | 9 |
| bamboo | 8 …Run Code Online (Sandbox Code Playgroud)