我有两个相关的表:

(1)人包含名称和图像文件。

(2)城市包含他们访问过的城市。



id name     image
1  John     NULL
2  Carrie   001.jpg
3  Desmond  002.jpg
4  Harry    003.jpg
5  Paul     NULL


城市

id  city      people_id   year_visited
1   Chicago   1           2000
2   Chicago   4           2000
3   Chicago   5           2001
4   Paris     1           2000
5   Paris     2           2002
6   Chicago   4           2002
7   Chicago   1           2001
8   London    1           2004
9   Sydney    5           2001
10  Sydney    1           2002
11  Rio       5           2002
12  London    5           2004
13  Sydney    5           2003
14  Sydney    5           2005


我想找出所有没有图像的人,以及他们访问过最多的城市。所以我想要的结果是:

name  most_visited_city number_of_visits
John  Chicago           2
Paul  Sydney            3


我可以group_concat他们访问过的城市,但不能深入到他们访问最多的单个城市。

感谢所有帮助。

最佳答案

以下是人员,城市和人数的信息:

select p.id, c.city, count(*) as cnt
from people p join
     cities c
     on p.id = c.people_id
where p.image is null
group by p.id, c.city;


在MySQL中,获取有关访问量最大的信息非常棘手。如果数据不是太大,这是一种可行的方法:

select id,
        substring_index(group_concat(city order by cnt desc separator '|'), '|', 1) as most_visited_city,
        max(cnt) as number_of_times_visited
from (select p.id, c.city, count(*) as cnt
      from people p join
           cities c
           on p.id = c.people_id
      where p.image is null
      group by p.id, c.city
     ) pc
group by id;

10-02 05:31