同一个表
问题描述:
子选择查询有用于从用户登录呼叫表:同一个表
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
答
使用条件聚集
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;
什么是 “最常用的” 是什么意思? –
@juergend,对不起,英语不是我的母语。 “最常用的”意思是更高的TIME_TO_SEC(TIMEDIFF(calls.End,calls.Start))。谢谢! – Guybrush