2010-10-26 75 views
2

SQL表由calling_partycalled_partycall_duration列组成。该示例记录如下:使用纯SQL查询计算统计信息

A,B,23 
A,C,12 
A,H,90 
B,R,56 
N,B,78 

对于存储在这两个角色calling_partycalled_party我想进行统计,例如什么是呼入通话的总时长每一个用户,究竟是什么的数量传出对话等

要选择用户我写了下面的查询:

SELECT DISTINCT 
    t1.calling_party 
FROM 
    dbo.monthly_connections AS t1 
INNER JOIN 
    (SELECT called_party 
    FROM dbo.monthly_connections) AS t2 ON t1.calling_party = t2.called_party AS table_users 

从这里开始,我知道如何在经历所有返回的行所选择的编程语言创建一个方法如果可能的话我宁愿写,将计算每个用户的统计数据,未经书面编程语言自定义方法的帮助下,嵌套查询,但不知道

SELECT SUM(call_duration), COUNT(*) 
FROM table_users 
WHERE calling_party = current_user 
GROUP BY calling_party 

:和执行的每一行查询怎么做。有谁知道该怎么做?

+0

对不起,但你的疑问混淆比他们澄清更多。例如,'table_users'是否真的有名为'call_duration'和'calling_party'的列?如果你记录了表格定义,这将有很大的帮助。 – 2010-10-26 09:30:04

回答

1

这样的事情?

WITH INCOMING AS (
    SELECT called_party PARTY, SUM(call_duration) INCOMING_TOTAL 
    FROM monthly_connections 
    GROUP BY called_party 
), 
OUTGOING AS (
    SELECT calling_party PARTY, SUM(call_duration) OUTGOING_TOTAL 
    FROM monthly_connections 
    GROUP BY calling_party 
) 
SELECT COALESCE(INCOMING.PARTY,OUTGOING.PARTY) AS PARTY, 
     INCOMING.INCOMING_TOTAL, OUTGOING.OUTGOING_TOTAL 
    FROM INCOMING 
    FULL OUTER JOIN OUTGOING ON OUTGOING.PARTY = INCOMING.PARTY