gpt4 book ai didi

mysql - 同一个表的子选择查询

转载 作者:行者123 更新时间:2023-11-29 19:16:31 26 4
gpt4 key购买 nike

有一个表用于记录用户的调用:

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 个最常用的手机,并获取按类型分隔的持续时间(以秒为单位)(天哪!)。像这样的事情:

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 Fiddle 以更好地理解和测试: 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;

关于mysql - 同一个表的子选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42655310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com