【问题标题】:How to get the maximum count, and ID from the table SQL如何从表 SQL 中获取最大计数和 ID
【发布时间】:2014-05-05 03:14:19
【问题描述】:
**castID**
nm0000116
nm0000116
nm0000116
nm0000116
nm0000116
nm0634240
nm0634240
nm0798899

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

【问题讨论】:

  • 请通过提供您尝试过的代码来阐明您的具体问题。正如目前所写的那样,很难准确地说出你在问什么。

标签: mysql sql querying


【解决方案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)

【讨论】:

  • 嘿,谢谢你,你能告诉我如何获得所选 castID 的计数吗?
  • 是的,只需在 Select 子句中包含 count(*)...我编辑了查询。
  • 我一直在尝试创建一个视图,但是它给了我一个错误:#1349 views slect 在 from 子句中包含一个子查询,您有什么建议吗?
【解决方案2】:
SELECT 
  MAX(E),
  castId
FROM 
 (SELECT COUNT(castId) AS E,castId FROM [directors winning movies list] GROUP BY castId) AS t

【讨论】:

  • 这是我输入的内容:SELECT MAX(E), castID FROM (SELECT COUNT(caseID),castID AS E FROM directors winning movies list GROUP BY castID) 但我得到 MySQL 说:#1248 -每个派生表都必须有自己的别名
  • 是的,已经使用了引号,#1248 - 每个派生表都必须有自己的别名
  • 现在我收到错误 #1054 - '字段列表'中的未知列 't.castID'
  • @user3601148 : 更新了我的帖子
  • #1054 - 'field list' 中的未知列 'castID' 仍然存在
【解决方案3】:

您可以使用 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's approach 相同,只是得出的最高计数不同。)

或者,您可以使用变量对所有计数进行排名,然后仅返回排名为 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
;

【讨论】:

    猜你喜欢
    • 2021-03-02
    • 2016-04-14
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多