0

このようなウェブサイトのトラフィックログ情報を含むデータテーブルがあります

date         ip     country     duration
02/12/2013   *      USA           455
02/13/2013   *      CA           1234
02/14/2013   *      Cambodia       13
02/12/2013   *      USA            12
03/11/2013   *      Korea          11
....

ここで、合計訪問時間を国別に合計する集計クエリによる合計/グループを実行したいと考えていますが、3 つのグループ (USA、カナダ、その他のすべてのユーザー) のみを作成したいと考えています。

そして、次のような理想的な出力を生成します。

  country     sum(durations) 
   USA            123456789
   Canada          55555679
Everyone Else        696969

単一のクエリでこれを行うことは可能ですか?

4

3 に答える 3

3

CASE次のステートメントでこれを行うことができます。

select (
  case 
    when country in ('USA','Canada') then country 
    else 'Everyone Else' 
   end
) as country_group,
  sum(duration)
from your_table
group by country_group
于 2013-04-04T14:59:23.707 に答える
1
select country, sum(duration)
from
(
select date, ip, 
       case 
           when country <> 'USA' and country <> 'Canada' then 'Everyone Else'
           else country
       end country,
       duration
from trafficlog
) subsel
group by country
于 2013-04-04T14:58:01.510 に答える
1

何かのようなもの

SELECT ..
...
GROUP BY
    CASE country
        WHEN 'USA' THEN 'USA'
        WHEN 'Canada' THEN 'Canada'
        ELSE 'Everyone Else'
    END CASE

トリックを行うでしょう。頭のてっぺんから外れるので、これはおそらくそのままでは機能しません。しかし、MySQL は group/where/order 句の任意のロジックを受け入れるため、グループ化を実行したいものは何でも記述できます。

別のオプション:

SELECT IF(country NOT IN ('Canada', 'USA'), 'Everyone Else', country) AS country
...
GROUP BY country
于 2013-04-04T14:58:31.793 に答える