因此,我正在使用MS,并将这个参与者列表分为年龄、名称和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=<,8-9,5-7,2-4,0-1,基于同名。频率是指年龄组在任何名称子集中出现的次数。例如,年龄组10=<在子集Dave中出现了两次。
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;
但我完全迷上了第二步.如果你能帮我个忙就好了。
发布于 2020-02-24 16:45:50
这种花哨的SQL将提供分组输出:
SELECT
T3.age, T3.age_group, T3.name
FROM
Participants As T3
INNER JOIN
(SELECT [age] * 1000 + Count(*) AS rating, T.name
FROM participants AS T
INNER JOIN
(SELECT Max(participants.age) AS maxage, participants.name
FROM participants
GROUP BY participants.name) AS T2
ON (T.age = T2.maxage) AND (T.name = T2.name)
GROUP BY T.name, T.age
ORDER BY [age] * 1000 + Count(*) DESC) AS T4
ON T3.name = T4.name
ORDER BY T4.rating Desc, T3.age Desc
输出:
发布于 2020-02-24 15:56:35
试试这个:
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
准入:
select p1.name, p1.age_group, p1.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 p1.name, p1.age, p2.freq desc
存取输出:
https://stackoverflow.com/questions/60379133
复制相似问题