MySQL使用分组依据选择最大发生次数

时间:2016-04-14 02:19:19

标签: mysql sql max

我有一个表(log_entries):

id|token|area|
 1| 543 | AA |
 2| 452 | BB |
 3| 543 | BB |
 4| 634 | CC |
 5| 436 | AA |

我想创建按标记分组的前5个区域的列表,但是使用的区域是令牌使用的最后一个区域。基本上是前5个区域的列表,其中每个令牌只获得一票,而它的投票是针对它记录的最后一个区域。

例如,对于上表,列表如下所示:

|area|count|
| BB |  2  |
| AA |  1  |
| CC |  1  |

如何在MySQL语句中执行此操作? (顺便说一下,表格大于> 50,000行)

1 个答案:

答案 0 :(得分:0)

SQL表代表无序集。您需要另一列来指定排序。

以下是获取每个令牌的最新区域的一种方法:

select area, count(*)
from (select t.*,
             (@rn := if(@t = token, @rn + 1,
                        if(@t := token, 1, 1)
                       )
             ) as seqnum
      from t cross join
           (select @rn := 0, @t := '') params
      order by tokens, ??
     ) t
where seqnum = 1
group by area
order by count(*) desc;

您需要将??替换为指定排序的列名,以确定最新的。