我有一个包含网站流量日志信息的数据表
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
....
现在我想通过汇总查询来进行汇总/分组,该汇总查询按国家/地区总计访问持续时间,但我想只生产三个组(美国,加拿大,其他人)
并产生这样的理想输出:
country sum(durations)
USA 123456789
Canada 55555679
Everyone Else 696969
是否可以在单个查询中执行此操作?
答案 0 :(得分:2)
您可以使用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
答案 1 :(得分: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
答案 2 :(得分: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