【问题标题】:MYSQL FIND MOST FREQUENT(S) VALUES [duplicate]MYSQL查找最频繁的值[重复]
【发布时间】:2018-11-12 21:00:01
【问题描述】:

我有以下查询可以正确解析租车中最常见的颜色。这很好用。

SELECT Colour
FROM car 
INNER JOIN rents
ON car.PlateNr=rents.PlateNr
GROUP BY car.colour
ORDER BY COUNT(car.colour) DESC
LIMIT 1
;

但是,如果有 2 个相同的最常见值(对于汽车颜色),则第二个会丢失。如何在 MYSQL 中选择两个最常见的值?我在其他 DBMS 中看到了 TOP 1 value 选项,但我似乎在 MYSQL 中找不到等效项。

【问题讨论】:

  • 请发布一些示例数据和预期输出。另外,您的 MySQL 服务器版本是什么?可以升级到最新版本(8.0.2 及以上)吗?
  • @paulsm4 OP 在这里基本上需要DENSE_RANK() 功能。他希望获得排名靠前的行[如果出现平局,请全部获得]。
  • 请尽量避免使用全大写,因为它被认为是大喊大叫。
  • "我在其他 DBMS 中看到了 TOP 1 值选项,但在 MYSQL 中似乎没有找到等效项。"是的,您已经在使用它的 SQL Server TOP 1 在 SQL Server 中与 MySQL 的 LIMIT 1 相同

标签: mysql


【解决方案1】:

您可以先计算顶部颜色计数,然后使用它来选择具有相同值的记录。

SQL Fiddle

SET @top_colour_cnt = (select COUNT(car.colour) as max_color_cnt
                       from car
                       GROUP BY car.colour
                       ORDER BY COUNT(car.colour) DESC
                       LIMIT 1
                      );

SELECT @top_colour_cnt;

SELECT Colour, COUNT(car.colour)
FROM car 
GROUP BY car.colour
having COUNT(car.colour) = @top_colour_cnt
;

【讨论】:

猜你喜欢
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
相关资源
最近更新 更多