论坛首页 综合技术论坛

常见的统计需求,MYSQL 下 SQL语句如何来完成?

浏览 2960 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-10  

有一张表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语句?

 

   发表时间:2008-04-10  
这明显是一个交叉报表,就是说行头和列头都是动态从结果集里取得的。
应该先用一个简单的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
0 请登录后投票
   发表时间:2008-04-10  

我自己做完成了

 

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

 

0 请登录后投票
   发表时间:2008-04-11  
不错,我也学了一招。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics