2013-07-24 89 views
0

我希望你能帮我解决一个我看不出来的SQL语句。通过计数组列出SQL数据

我有一个访问清单,访问的国家和日期如表;

  • 英国,2009年11月1日
  • 德国,2010 6月8日
  • 式刚架,2011年9月10
  • 英国,2011年10月11日

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

时报访问 - 国家名单

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

,使数据表明,我已经4 visist捷克,美国&坎达

和查询

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项。即

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

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

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

感谢

+0

的http://开发.mysql.com/DOC/refman/5.0/EN/group-by-functions.html#function_group-concat –

回答

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.

+0

太简单了,太棒了!我所有的SQL年我从来没有遇到过group_concat。谢谢 –

+0

@ jason.kaisersmith还有[**'CONCAT' **](http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat),[**' CONCAT_WS' **](http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws),它们都很有用。 – Prix