尝试使用 Ties 获得 2 min(count())

Trying to get the 2 min(count()) with Ties

我允许自己写一个关于我现在尝试进行几个小时的查询的线程。我正在尝试获取 拒绝最多提议的活动日期的朋友 (friend.first_name) 的姓名。

为此,我正在计算建议日期和按 ASC 排序的数量。

SELECT COUNT(*) 'NbrProposedDate', f.FIRST_NAME, 
f.LAST_NAME, f.FRIEND_ID
FROM PROPOSES
NATURAL JOIN FRIEND f
GROUP BY f.FRIEND_ID
ORDER BY NbrProposedDate ASC
LIMIT 1;

但是,这没有考虑TIES

我正在寻找的是以下结果:

此外,我还看到了 FETCH FIRST 1 ROW WITH TIES,但它似乎不适用于 MySQL(出现 SQL 语法问题)。

最后,我找到了一个使用函数的替代方法:

-- Find Minimum Count
SELECT MIN(cnt) INTO @min FROM (SELECT COUNT(*) cnt FROM     PROPOSES NATURAL JOIN FRIEND f GROUP BY f.FRIEND_ID) t;

-- Show Friends with minimum count 
DROP VIEW IF EXISTS troublemaker;
CREATE VIEW troublemaker AS
SELECT FIRST_NAME, LAST_NAME
FROM PROPOSES p
JOIN (SELECT FRIEND.FRIEND_ID 
      FROM PROPOSES 
      NATURAL JOIN FRIEND 
      GROUP BY FRIEND.FRIEND_ID 
      HAVING COUNT(*) = @min) t
ON p.FRIEND_ID = t.FRIEND_ID
JOIN FRIEND ON t.FRIEND_ID = FRIEND.FRIEND_ID
ORDER BY p.FRIEND_ID ASC;

但是,问题是,我需要将其放入视图中,但是“视图的 SELECT 包含一个变量或参数”。

因此,我正在寻找另一种替代方法或解决方案来解决此问题。

P.S。 : 这是一个 MLD :

不需要查看,查询结果可以作为子查询

SELECT 
  COUNT(*) NbrProposedDate, 
  MAX(f.FIRST_NAME) FIRST_NAME,
  MAX(f.LAST_NAME) LAST_NAME, 
  f.FRIEND_ID
FROM PROPOSES
NATURAL JOIN FRIEND f
GROUP BY f.FRIEND_ID
HAVING COUNT(*) = (
  SELECT COUNT(*) 
  FROM PROPOSES
  NATURAL JOIN FRIEND f
  GROUP BY f.FRIEND_ID
  ORDER BY COUNT(*)
  LIMIT 1
)

在MySQL 8+,也可以用RANK()

WITH ranks AS (
SELECT 
  COUNT(*) NbrProposedDate, 
  MAX(f.FIRST_NAME) FIRST_NAME,
  MAX(f.LAST_NAME) LAST_NAME, 
  f.FRIEND_ID,
  RANK() OVER (ORDER BY COUNT(*) ASC) rk
FROM PROPOSES
NATURAL JOIN FRIEND f
GROUP BY f.FRIEND_ID
)
SELECT * FROM ranks WHERE rk = 1