-1
**castID**
nm0000116
nm0000116
nm0000116
nm0000116
nm0000116
nm0634240
nm0634240
nm0798899

这是我的表(创建为视图)。现在我想列出计数最多的 castID(在本例中为 nm0000116,以及它在此表中的出现次数/计数(应该是 5 次),我不太确定要使用哪个查询

4

3 回答 3

1
SELECT 
  MAX(E),
  castId
FROM 
 (SELECT COUNT(castId) AS E,castId FROM [directors winning movies list] GROUP BY castId) AS t
于 2014-05-05T03:16:23.467 回答
1

尝试

Select CastId, count(*) countOfCastId
From table 
Group By CastId
Having count(*)
    = (Select Max(cnt)
       From (Select count(*) cnt
             From table
             Group By CastId) z)
于 2014-05-05T03:23:18.313 回答
0

您可以使用返回最高计数LIMIT

SELECT   castID,
         COUNT(*) AS Cnt
FROM     atable
GROUP BY castID
ORDER BY Cnt DESC
LIMIT    1
;

但是,如果存在平局,则上述查询将仅返回一行。如果您想要所有“赢家”,您可以将上述查询中的计数作为标量结果,并将其与所有计数进行比较以仅返回匹配的计数:

SELECT   castID,
         COUNT(*) AS Cnt
FROM     atable
GROUP BY castID
HAVING   COUNT(*) = (
                        SELECT   COUNT(*)
                        FROM     atable
                        GROUP BY castID
                        ORDER BY Cnt DESC
                        LIMIT    1
                    )
;

(基本上,与Charles Bretana 的方法相同,它只是以不同的方式得出最高计数。)

或者,您可以使用变量对所有计数进行排名,然后仅返回排名为 1 的计数:

SELECT castID,
       Cnt
FROM   (
          SELECT   castID,
                   COUNT(*) AS Cnt,
                   @r := IFNULL(@r, 0) + 1 AS r
          FROM     atable
          GROUP BY castID
          ORDER BY Cnt DESC
       ) AS s
WHERE r = 1
;

请注意,使用上述方法,变量必须不存在或在运行查询之前使用 0 或 NULL 预初始化。为了安全起见,您可以直接在查询中初始化变量:

SELECT s.castID,
       s.Cnt
FROM   (SELECT @r := 0) AS x
CROSS JOIN
       (
          SELECT   castID,
                   COUNT(*) AS Cnt,
                   @r := @r + 1 AS r
          FROM     atable
          GROUP BY castID
          ORDER BY Cnt DESC
       ) AS s
WHERE s.r = 1
;
于 2014-05-05T16:52:28.810 回答