按组计数列出SQL数据

时间:2013-07-24 10:14:46

标签: mysql sql

我希望你能帮我解决一个我似乎无法弄清楚的SQL语句。

我有一张表格,其中列出了所访问的国家/地区以及日期,例如;

  • 英国,2009年11月1日
  • 德国,2010年6月8日
  • Frane,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 USA
  • 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个条目。即。

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

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

任何想法如何在mysql中执行此操作?

由于

1 个答案:

答案 0 :(得分: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

Live DEMO.