MySQL 使用 Group By 选择最大出现次数

标签 mysql sql max

我有一个表(log_entries):

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

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

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

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

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

最佳答案

SQL 表表示无序集。您需要另一列来指定顺序。

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

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;

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

关于MySQL 使用 Group By 选择最大出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36612720/

相关文章:

sql - 内部连接后自连接

c++ - 如何在 C++ 中将 const int 设置为最大值?

MySQL 不会用空格替换单词

Php和mysql pdo查询

mysql - 增量更新列中的所有名称

mysql - 使用三个表进行灵活搜索或sql查询?

sql - 不支持接口(interface)映射,但Linq-Sql对象已经实现了属性

c# - AutoGenerateColumn e.cancel 是否会影响 Table.Column.Count?

java - 整数的最大值

python - Pandas : vectorized operations on maximum values per row