显示所有预订中最受欢迎的两项活动
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
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