同一个表

问题描述:

子选择查询有用于从用户登录呼叫表:同一个表

users: 
- Id INT 11 
- Name VARCHAR 30 

calls: 
- Id  INT 11 
- UserId INT 11 
- DateBgn DATETIME 
- DateEnd DATETIME 
- Number VARCHAR 30 
- Type TYNYINT 1 

Type: 1-Incoming call/2-Outgoing call 

我的SQL知识是非常有限的,但我被要求创建一个查询,列出10个最常用的电话并获得按类型(OMG!)分隔的持续时间(以秒为单位)。事情是这样的:

Phone  Type1 Type2 
000-0000 350 210 
111-1111 300 150 
222-2222 300 140 
333-3333 230 200 

已经能够获得通话时间(秒):

TIME_TO_SEC(TIMEDIFF(DateEnd, DateBgn)) 

这里是我走到这一步:

SELECT 
    Number, 
    SUM(TIME_TO_SEC(TIMEDIFF(DateEnd, DateBgn))) AS Duration 
FROM 
    calls 
WHERE 
    UserId = 10 AND 
    Type = 1   # Incomming Call 
GROUP BY 
    Number 
ORDER BY 
    2 DESC 
LIMIT 10; 

这个SQL上面所列内容我顶10个最常用的电话号码,但只有来电(类型= 1)。请,我如何列出两个分开的类型?

谢谢!


编辑:

我创建了一个SQL捣鼓更好地了解和测试: http://sqlfiddle.com/#!9/aaf9b4/1

+0

什么是 “最常用的” 是什么意思? –

+0

@juergend,对不起,英语不是我的母语。 “最常用的”意思是更高的TIME_TO_SEC(TIMEDIFF(calls.End,calls.Start))。谢谢! – Guybrush

使用条件聚集

SELECT 
    Phone, 
    SUM(case when Type = 1 then TIME_TO_SEC(TIMEDIFF(End, Start)) else 0 end) AS Duration1, 
    SUM(case when Type = 2 then TIME_TO_SEC(TIMEDIFF(End, Start)) else 0 end) AS Duration2 
FROM 
    calls 
WHERE 
    UserId = 10   
GROUP BY 
    Phone 
ORDER BY 
    SUM(TIME_TO_SEC(TIMEDIFF(End, Start))) DESC 
LIMIT 10; 
+0

再次感谢您!我会尽力让你知道! – Guybrush

+0

我更新了'order by' –

+0

对不起,我为了更好理解而创建了I SQL小提琴。请看看http://sqlfiddle.com/#!9/aaf9b4/1 – Guybrush