【问题标题】:Trying to get the 2 min(count()) with Ties试图用 Ties 获得 2 min(count())
【发布时间】:2021-12-25 18:31:12
【问题描述】:

我允许自己写一个关于我现在尝试进行几个小时的查询的线程。我正在尝试获取拒绝建议的活动日期最多的朋友的姓名 (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 包含一个变量或参数”。

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

附: : 这是一个 MLD :

【问题讨论】:

    标签: mysql sql select count mysql-workbench


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-15
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 2022-12-05
      相关资源
      最近更新 更多