【问题标题】:SQL - Finding entries that are the max of a count?SQL - 查找计数最大值的条目?
【发布时间】:2022-01-11 13:14:50
【问题描述】:

我有一张如上图所示的表格,如何显示客户的 id 和姓名以及客户订购最多的食物类别?

SELECT Customer_ID, COUNT(F_Catg) 
FROM ORDER_RECORD ORD
INNER JOIN FOOD_MENU FM
ON ORD.Item_ID = FM.Item_ID
GROUP BY Customer_ID 
HAVING COUNT(F_Catg) = 
    (SELECT MAX(c) FROM
        (SELECT COUNT(F_Catg) AS c
         FROM ORDER_RECORD ORD
         INNER JOIN FOOD_MENU FM
         ON ORD.Item_ID = FM.Item_ID
         GROUP BY Customer_ID))

我试过了,但它不起作用。

【问题讨论】:

  • “它不起作用”不是问题。具体是什么问题,有什么错误吗?一个错误的结果? ..

标签: sql group-by oracle-sqldeveloper having


【解决方案1】:

您的派生表缺少别名。解决这个问题,您的查询应该可以工作:

SELECT Customer_ID, COUNT(F_Catg)
FROM ORDER_RECORD ORD
INNER JOIN FOOD_MENU FM ON ORD.Item_ID = FM.Item_ID
GROUP BY Customer_ID
HAVING COUNT(F_Catg) = (SELECT MAX(c) FROM (
                            SELECT COUNT(F_Catg) AS c
                            FROM ORDER_RECORD ORD
                            INNER JOIN FOOD_MENU FM ON ORD.Item_ID = FM.Item_ID
                            GROUP BY Customer_ID) t  -- fix is here
                        );

在 MySQL 8+ 上,您可以使用 RANK 分析函数进行一些简化:

WITH cte AS (
    SELECT Customer_ID, COUNT(F_Catg) AS cnt,
           RANK() OVER (ORDER BY COUNT(F_Catg) DESC) rnk
    FROM ORDER_RECORD ORD
    INNER JOIN FOOD_MENU FM ON ORD.Item_ID = FM.Item_ID
    GROUP BY Customer_ID
)

SELECT Customer_ID, cnt
FROM cte
WHERE rnk = 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 2019-09-20
    • 2012-01-09
    • 2016-02-19
    • 2022-11-10
    相关资源
    最近更新 更多