常见的统计需求,MYSQL 下 SQL语句如何来完成?
关键字: sql有一张表table1 结构如下.
table1:
username action
--------------------------------
A CALL
A SEARCH
A SEARCH
B CALL
B SEARCH
A SEARCH
A VIDEO
B SEARCH
B VIDEO
A CALL
B VIDEO
--------------------------------
通过一条SQL语句得出下列统计数据:
table2
username CALL_TIMES SEARCH_TIMES VIDEO_TIMES
-------------------------------------------------------------------------------
A 2 3 1
B 1 2 2
-------------------------------------------------------------------------------
说明:
table.action 中所有可能的值都已知的,只有 CALL , SEARCH ,VIDEO 和 table2 的字段一一对应
table1 中目前数据50W条。
有没有效率较高的SQL语句?
评论
我自己做完成了
MYSQL 语句:
select
t.username,
max(CASE T.action WHEN 'CALL' THEN T.NN ELSE 0 end) as CALL_TIMES,
max(CASE T.action WHEN 'SEARCH' THEN T.NN ELSE 0 end) as SEARCH_TIMES,
max(CASE T.action WHEN 'VIDEO' THEN T.NN ELSE 0 end) as VIDEO_TIMES
from
(select temp.username,temp.action,count(*) as NN
from temp
group by temp.username,temp.action) as T
group by T.username
对应的 Oracle 语句:
select username,
max(decode(action,'CALL',NN,0)) AS CALL_TIMES ,
max(decode(action,'VIDEO',NN,0)) AS VIDEO_TIMES ,
max(decode(action,'SEARCH',NN,0)) AS VIDEO_TIMES
from
(select username,action,count(*) AS NN from table1
group by username,action)
group by username
应该先用一个简单的group by获得结果,再用报表工具,或者自己编程转换成最终结果。
语句为:select username,action,count(*) from table1 group by username,action
结果集为,例如:
username action count(*)
A CALL 2
A SEARCH 4
B CALL 3
B SEARCH 5
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 16821 次

- 详细资料
搜索本博客
最新评论
-
JPA的Embeddable Objects
JPA embeddable 中能用@OneToMany吗? 我查了下 topl ...
-- by lopor -
一个正则表达式的写法
可利用负向前瞻: <script> alert(/^(?!3{5,13}$ ...
-- by zbm2001 -
一个正则表达式的写法
能匹配 [a-zA-Z0-9]{3,13}$且不能匹配 [0-9]{3,13 ...
-- by ealpha -
常见的统计需求,MYSQL 下 ...
不错,我也学了一招。
-- by Lucas Lee -
常见的统计需求,MYSQL 下 ...
我自己做完成了 MYSQL 语句: select ...
-- by ealpha






评论排行榜