【发布时间】:2021-11-16 22:06:10
【问题描述】:
如标题所述,我希望选择前 3 个值,如果计数的值重复,也包括它。
SELECT b.planID, count(b.planID) AS PopularPlan
FROM dbo.Subscriber as b
GROUP BY B.planID
ORDER BY count(b.planID) DESC;
此输出返回所有最大值,例如:
PlanID PopularPlan
101 2555
123 2555
432 2390
23 2390
45 2090
12 2080
55 2090
如果我使用 TOP 3,选择 TOP 3,使用以下 SQL:
SELECT TOP 3 b.planID, count(b.planID) AS PopularPlan
FROM dbo.Subscriber as b
GROUP BY B.planID
ORDER BY count(b.planID) DESC;
它将返回以下内容:
PlanID PopularPlan
101 2555
123 2555
432 2390
在这种情况下,期望的输出是做我想做的事情:
PlanID PopularPlan
101 2555
123 2555
432 2390
23 2390
45 2090
我了解 TOP 3 仅限于三个结果,但我似乎无法弄清楚如何添加重复的方法。
此外,如果我要加入 WITH TIES:
SELECT TOP 3 WITH TIES b.planID, count(b.planID) AS PopularPlan
FROM dbo.Subscriber as b
GROUP BY B.planID
ORDER BY count(b.planID) DESC;
这种情况下的输出是:
PlanID PopularPlan
101 2555
123 2555
432 2390
23 2390
在测试时,如果我选择 TOP 5,则会出现 2090 值,但我希望尽可能对 TOP 3 执行相同操作,以便输出保持原样:
PlanID PopularPlan
101 2555
123 2555
432 2390
23 2390
45 2090 <- has to have this value too
【问题讨论】:
-
where planid in (select top(3) planid from t group by... order by...)?