我试图编写最有效的sql来从下面的数据中获取结果
Name,Age,URL
A,20,abc.com
B,12,ghi.com
C,25,def.com
D,21,abc.com
E,22,ghi.com
F,23,jkl.com
G,24,def.com
H,20,jkl.com
I,19,ghi.com
J,19,abc.com
K,22,def.com
L,16,jkl.com
M,15,def.com
N,27,jkl.com
O,26,abc.com
P,50,jkl.com
Q,12,def.com
R,56,abc.com
S,22,def.com
T,24,abc.com
U,35,jkl.com
V,45,ghi.com
W,20,abc.com
X,19,jkl.com
Y,18,abc.com
Z,65,ghi.com
我想要前5位网址,其中访问的用户数最多,从18岁到25岁。
最有效的方法是什么呢?比先写过所有内部查询,比如第一个过滤器年龄,而不是组和计数......?
输出架构将是 URL(前5名),CountOfUsers(18-25)
由于
答案 0 :(得分:1)
除了分组之外,没有其他有效方法。
select count(name), url
from <tablename>
where age >= 18 and age <= 25
group by url
order by count(name) dsc
limit 0, 5
从我的观点来看,加快这一点的唯一方法是使用集群和/或索引! 至少不需要内部查询。
答案 1 :(得分:0)
这对你有用,
select top 5 NameCount = Count(name), url
from (select name, url
from [tablename] where age >= 18 and age <= 25) dd
group by url
order by count(name) desc