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 つのエントリのみを取得します。すなわち

  • 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 に答える