0

我希望您能帮助我解决我似乎无法理解的 SQL 语句。

我有一张表格,上面有访问清单,访问过的国家和日期,例如;

  • 英国,2009 年 11 月 1 日
  • 德国,2010 年 6 月 8 日
  • 弗兰,2011 年 9 月 10 日
  • 英国,2011 年 10 月 11 日

等等

我想提取数据,以便获得如下表格列表

访问次数 - 国家/地区列表

  • 23 - 英国
  • 10 - 法国、德国
  • 4 - 捷克共和国、美国、加拿大
  • 1 - 波兰、塞尔维亚、阿根廷、新西兰

所以数据显示我已经对捷克共和国、美国和加拿大进行了 4 次访问

和查询

select * from 
(
    select count(*) as "trips", country from trip_view
    group by country
    order by 1 desc
) as a

返回数据

  • 23 英国
  • 10 法国
  • 10 德国
  • 4 捷克共和国
  • 4 美国
  • 4 加拿大
  • 等等

所以我需要一种关于外部 SQL 的组,但是如果我执行以下操作

select * from 
(
    select count(*) as "trips", country from trip_view
    group by country
    order by 1 desc
) as a
group by trips

然后我只能为每个国家/地区获得 1 个条目。IE

  • 23 英国
  • 10 法国
  • 4 捷克共和国
  • 等等

因此,对于每一行,我只列出了 1 个国家,而不是全部。即第 2 行应显示法国和德国,第 3 行应显示捷克、美国和加拿大

任何想法如何在mysql中做到这一点?

谢谢

4

1 回答 1

1

在国家列上使用GROUP_CONCAT它应该会产生您想要的结果:

  SELECT trips, 
         GROUP_CONCAT(country) AS country 
    FROM (
           SELECT COUNT(*) AS "trips", 
                  country 
             FROM trip_view
         GROUP BY country
         ) a
GROUP BY trips
ORDER BY 1 DESC

输出:

TRIPS   COUNTRY
   23   United Kingdom
   10   France,Germany
    4   Czech Republic,Canada,USA

现场演示。

于 2013-07-24T10:34:04.353 回答