基于共同值的值,字母和频率分组和排序

问题描述 投票:0回答:2

因此,我正在使用MS Access,并有此参与者列表,其中有三列age,name和age_group,并希望它首先按名称排序,然后按年龄排序,再根据基于相同名称的age_group的频率排序。例如:

age | age_group |name  
----------------------
1      0-1        Jeff
10     10=<       Dave
10     10=<       Dave
5      5-7        Carl
2      2-4        Sam
3      2-4        Carl
4      2-4        Sam
2      2-4        Sam
5      5-7        Carl
6      5-7        Jeff
7      5-7        Dave
10     10=<       Jeff
8      8-9        Jeff

所以它首先看起来像这样,按名称和年龄排序

----------------------
10     10=<       Jeff
8      8-9        Jeff
6      5-7        Jeff
1      0-1        Jeff
10     10=<       Dave
10     10=<       Dave
7      5-7        Dave
5      5-7        Carl
5      5-7        Carl
3      2-4        Carl
4      2-4        Sam
2      2-4        Sam
2      2-4        Sam

最后是age_group频率,基于相同名称,降序为10 =

age | age_group |name  
----------------------
10     10=<       Dave
10     10=<       Dave
7      5-7        Dave
10     10=<       Jeff
8      8-9        Jeff
6      5-7        Jeff
1      0-1        Jeff
5      5-7        Carl
5      5-7        Carl
3      2-4        Carl
4      2-4        Sam
2      2-4        Sam
2      2-4        Sam

这可以在SQL或VBA中完成吗?我得到第一个与之合作的东西:

SELECT participants.name, participants.age_group, participants.age, *
FROM participants
ORDER BY participants.name, participants.age DESC;

但是我在执行第二步时完全迷失了……如果您能帮助我,将不胜感激。

sql excel vba ms-access group-by
2个回答
0
投票

尝试一下:

select p1.name, p2.age_group, p2.age
from participants as p1
left join (select name, age_group, count(1) as freq from participants group by name, age_group) as p2
on p1.name= p2.name and p1.age_group = p2.age_group
order by name,age, p2.freq desc

-1
投票

这应该做:

SELECT 
    [name], 
    age_group, 
    age
FROM 
    participants
GROUP BY 
    [name], 
    age, 
    age_group
ORDER BY 
    [name], 
    age Desc;
© www.soinside.com 2019 - 2024. All rights reserved.