显示所有预订中最受欢迎的两项活动

Display the top two most popular activities across all reservations

Table 是

SUPERVISION (ResNo, ActivityID, SupervisorID, Day, Time)

我也做过这样的事情,但是错了

SELECT COUNT(S.Res, S.ActivityID) AS PopularActivities
FROM Supervision S
WHERE rownum = 2;
ORDER BY COUNT(*) DESC;

SELECT S.ResNo, S.ActivityID
FROM Supervision S
WHERE (rank() over (order by count(*) DESC) as RNK
    from Supervision S) AND rnk = 2;

需要放在子查询中:

SELECT *
FROM (
    SELECT
        ActivityID, COUNT(*) AS Cnt
    FROM Supervision
    GROUP BY ActivityID
    ORDER BY Cnt DESC
) t
WHERE rownum <= 2

或者,您可以使用 RANK 来获得相同的结果:

SELECT *
FROM (
    SELECT
        ActivityID, 
        RANK() OVER(PARTITION BY ActivityID ORDER BY COUNT(*) DESC) AS rnk
    FROM Supervision
    GROUP BY ActivityID
) t
WHERE rnk <= 2

对我来说,我所做的是:

ORDER BY TIME DESC

试试这个

SELECT *
FROM (
    SELECT
        ActivityID, COUNT(*) AS top
    FROM Supervision
    GROUP BY ActivityID
    ORDER BY top DESC
) t
limit 0,2

您想要所有预订中最受欢迎的两项活动。

这意味着您要统计每个 activity 类型的预订,并取计数最高的两个。

另一种说法是,您想按 activity 对预订进行分组,对它们进行计数,将结果递减排序,然后取前两个

您似乎在使用 Microsoft TSQL 语法,因此它应该如下所示:

SELECT TOP 2 ActivityID, COUNT(*)
  FROM SUPERVISION
  GROUP BY ActivityID
  ORDER BY COUNT(*) DESC