gpt4 book ai didi

mysql - 按聚合(计数)对查询结果进行排名

转载 作者:行者123 更新时间:2023-11-30 22:05:16 25 4
gpt4 key购买 nike

我正在尝试通过聚合函数获取排名值 - 我想看看它是否可以在 MySQL 查询中完成(而不是 ORM 调用查询)。

我的表格和数据是这样的:

CREATE TABLE `interactions` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`account` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

INSERT INTO `interactions` VALUES
(1, "xyz", "2017-01-01 00:05:01"),
(2, "xyz", "2017-01-01 00:05:10"),
(3, "abc", "2017-01-01 00:05:21"),
(4, "xyz", "2017-01-01 00:05:43"),
(5, "def", "2017-01-01 00:05:47"),
(6, "xyz", "2017-01-01 00:05:49"),
(7, "abc", "2017-01-01 00:05:50"),
(8, "abc", "2017-01-01 00:05:59");

到目前为止我有:

set @curRank := 0;

select
@curRank := @curRank + 1 AS rank,
der.account,
der.searches
from
interactions
right join
(select account, count(id) AS searches from interactions group by account order by searches) AS der
on
der.account = interactions.account;

但这会输出每个帐户(具有正确的 searches 值 - 但排名不止一次):

 1    abc        3
2 abc 3
3 abc 3
4 def 1
5 xyz 4
6 xyz 4
7 xyz 4
8 xyz 4

我在找:

 1    abc        3
2 def 1
3 xyz 4

我应该提一下,我不关心联合排名 - 如果两个帐户最终在表中的计数相同,那么它们是否一个接一个地排名(或什么顺序)并不重要。

最佳答案

向 SELECT 添加一个 DISTINCT 修复查询:

set @curRank := 0;

select distinct
der.account,
der.searches,
@curRank := @curRank + 1 AS rank
from
interactions
right join
(select account, count(id) AS searches from interactions group by account order by searches) AS der
on
der.account = interactions.account;

关于mysql - 按聚合(计数)对查询结果进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41995804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com