【发布时间】:2012-02-10 13:09:36
【问题描述】:
我有下表:
标识 |年份
10 | 2000
11 | 2001
10 | 2002
12 | 2003
11 | 2004
13 | 2005
10 | 2006
10 | 2007
根据 id,由于 10 出现次数最多,因此该表的选择应为 10。我知道这很容易,但我不能比 COUNT(*) 更进一步。
【问题讨论】:
我有下表:
标识 |年份
10 | 2000
11 | 2001
10 | 2002
12 | 2003
11 | 2004
13 | 2005
10 | 2006
10 | 2007
根据 id,由于 10 出现次数最多,因此该表的选择应为 10。我知道这很容易,但我不能比 COUNT(*) 更进一步。
【问题讨论】:
您需要分组依据、排序依据 - 以及限制:
SELECT id FROM sometable GROUP BY id ORDER BY COUNT(*) DESC LIMIT 1
这将按 id 对表进行分组,按计数降序排列,然后选择第一行(计数最高的行)。
【讨论】:
当有多个 id 具有最大计数时,以下 SQL 将起作用:
SELECT id FROM table GROUP BY 1
HAVING COUNT(*)=( SELECT MAX(t.count)
FROM ( SELECT id,COUNT(*) AS count
FROM table GROUP BY 1 ) t )
第一个(最里面的)SELECT 将只计算每个 id,这用于第二个SELECT 以确定最大计数,这将用于最后(最外面的)SELECT 以仅显示右侧ID。
希望对您有所帮助。
【讨论】: