我的数据库里有这些数据.

id  | company_id |     referrer
001 | 001        | https://google.com
002 | 001        | https://riot.com
003 | 001        | https://google.com
004 | 002        | https://vimeo.com
005 | 002        | https://yahoo.com
006 | 003        | https://yahoo.com

我想得到每个公司id的推荐人重复次数.一个公司有很多推荐人,但我只想得到数据中重复次数最高的推荐人.

结果是这样的:

company_id | referrer           | nRepeat
001        | https://google.com |  2
002        | https://yahoo.com  |  2

我试过这个密码:

SELECT company_id,
       referrer,
       Count(referrer) AS viewCount
FROM   `my_table`
GROUP  BY company_id
ORDER  BY viewcount DESC  

这个问题似乎是错误的.

抱歉,如果我解释得不好,如果你有问题,请告诉我.

有什么建议或帮助吗?非常感谢你的帮助!谢谢

推荐答案

我们可以在这里使用RANK:

WITH cte AS (
    SELECT company_id, referrer, COUNT(*) viewCount,
           RANK() OVER (PARTITION BY company_id ORDER BY COUNT(*) DESC) rnk
    FROM my_table
    GROUP BY company_id, referrer
)

SELECT company_id, referrer, viewCount
FROM cte
WHERE rnk = 1;

以下是使用CTE编写的单选文本:

SELECT company_id, referrer, viewCount
FROM
(
    SELECT company_id, referrer, COUNT(*) viewCount,
           RANK() OVER (PARTITION BY company_id ORDER BY COUNT(*) DESC) rnk
    FROM my_table
    GROUP BY company_id, referrer
) t
WHERE rnk = 1;

这里有一个版本应该可以在8+之前的MySQL版本上使用:

SELECT company_id, referrer, COUNT(*) viewCount
FROM my_table t1
GROUP BY company_id, referrer
HAVING COUNT(*) = (SELECT COUNT(*)
                   FROM my_table t2
                   WHERE t2.company_id = t1.company_id
                   GROUP BY referrer
                   ORDER BY COUNT(*) DESC
                   LIMIT 1);

Mysql相关问答推荐

如何在循环查询中删除默认架构?

SQL查询仅插入5行

Google Sheet查询以提取数据并用值替换复选框.(差异)

如何在使用VALUES()插入时指定jOOQ中的行别名

mysql 代码给我的外键格式不正确

"Shelf服务器容器访问MySQL Docker容器时出现SocketException异常"

如何分解分组依据的数据?

为什么 `count` 函数有效但 `sum` 无效?

如何在 Shopware 6 DAL 中实施 Haversine 公式?

使用来自另一个表 mysql 的值将新行插入到表中

MySQL DISTINCT 日期仅返回特定表的 1 个值.相同的查询适用于其他表

MySQL 8 - MBRContains 不使用空间索引

使用 JOIN 计算列中的所有值

具有别名主机的 ssh 反向 mysql tunel

显示值为空的所有列名

估计行数 SQL

动态创建内联 SQL 表(用于排除左连接)

从终端访问 MAMP 的 MySQL

Spring Boot:Jdbc javax.net.ssl.SSLException:在接收对等方的 close_notify 之前关闭入站

在 Postgresql 中模拟 MySQL 的 ORDER BY FIELD()