【问题标题】:List SQL data by a count of a group按组计数列出 SQL 数据
【发布时间】:2013-07-23 18:08:00
【问题描述】:

我希望你能帮我解决一个我似乎无法理解的 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 个条目。即

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

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

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

谢谢

【问题讨论】:

标签: mysql sql


【解决方案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.

【讨论】:

  • 如此简单,非常棒!我所有这些年的 SQL 我从来没有遇到过 group_concat 。谢谢
  • @jason.kaisersmith 还有CONCATCONCAT_WS,都很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 2015-05-29
相关资源
最近更新 更多