【问题标题】:Mysql top 3 count valuesMysql 前 3 个计数值
【发布时间】:2018-03-16 19:56:18
【问题描述】:

我有一个返回以下值的查询:

TemplateCode    Total
    1418        35
    7419        31
    7418        31
    8325        17 
    15623       17
    4997        17

我想要前 3 个 Total 值的所有行

在我的查询中,如果我在查询中包含LIMIT 3,那么它只会给出我不想要的 3 个。我不想包含LIMIT,因为计数可能会不时发生变化。

如何在Total 上包含条件并始终获得前 3 个计数值

我当前的查询是这样的:

select TemplateCode, count(*) as Total from table group by TemplateCode
order by Total desc
limit 3

【问题讨论】:

  • select * from table group by TemplateCode 请不要使用这样的结构。 ONLY_FULL_GROUP_BY
  • 您要求获得前 3 个最大的数字吗?如果是,那么只需在当前查询上使用 MAX() ,这将为您提供所需的结果。 (如果那是您所要求的)
  • 如何在命令中使用max()
  • 你想要什么结果集?
  • 您的预期结果是什么?

标签: mysql sql group-by count


【解决方案1】:

我认为这是你想要的:

select t.*
from t
where t.Total >= (select distinct t2.Total
                  from t t2
                  order by t2.Total desc
                  limit 2, 1
                 );

这假定您想要第三个 distinct 值。如果您只想要第三个值,请删除 distinct

【讨论】:

    【解决方案2】:

    您可以在子查询上使用内连接来获取前 3 个总数

    select m.TemplateCode , m.total
    from my_table m
    inner join (
      select Total
      from my_table 
      order by Total Desc 
      limit 3
    ) t  on t.total = m.total 
     order by m.total, m.TemplateCode 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 2012-04-04
      • 2018-10-28
      • 2014-06-24
      相关资源
      最近更新 更多