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

时间:2016-05-31 04:49:35

标签: sql oracle sqlplus

表是

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;

4 个答案:

答案 0 :(得分:0)

您需要将其放在子查询中:

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

答案 1 :(得分:0)

对我而言,我所做的就是:

ORDER BY TIME DESC

答案 2 :(得分:0)

试试这个

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

答案 3 :(得分:0)

您希望在所有预订中进行两项最受欢迎的活动。

这意味着您要计算每种活动类型的预订,并取两次最高计数。

另一种说法是,您希望按活动对预订进行分组,计算它们,对结果进行逐渐降序排序,并采取前两个

看起来您使用的是Microsoft TSQL语法,因此它应如下所示:

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