【MySQL】GROUP BY 后面直接使用数字的写法(简写)

发布时间:2024年01月10日

力扣题

1、题目地址

1699. 两人之间的通话次数

2、模拟表

表:Calls

Column NameType
from_idint
to_idint
durationint
  • 该表没有主键(具有唯一值的列),它可能包含重复项。
  • 该表包含 from_id 与 to_id 间的一次电话的时长。
  • from_id != to_id

3、要求

编写解决方案,统计每一对用户 (person1, person2) 之间的通话次数和通话总时长,其中 person1 < person2 。

以 任意顺序 返回结果表。

返回结果格式如下示例所示。

示例 1:

输入:

Calls 表:

from_idto_idduration
1259
2111
1320
34100
34200
34200
43499

输出:

person1person2call_counttotal_duration
12270
13120
344999

解释:
用户 1 和 2 打过 2 次电话,总时长为 70 (59 + 11)。
用户 1 和 3 打过 1 次电话,总时长为 20。
用户 3 和 4 打过 4 次电话,总时长为 999 (100 + 200 + 200 + 499)。

4、代码编写

分组使用原代码(非别名)

SELECT IF(from_id < to_id, from_id, to_id) AS person1, 
	   IF(to_id > from_id, to_id, from_id) AS person2,
	   COUNT(*) AS call_count, 
	   SUM(duration) AS total_duration
FROM Calls
GROUP BY IF(from_id < to_id, from_id, to_id), IF(to_id > from_id, to_id, from_id)

分组使用别名

SELECT IF(from_id < to_id, from_id, to_id) AS person1, 
	   IF(to_id > from_id, to_id, from_id) AS person2,
	   COUNT(*) AS call_count, 
	   SUM(duration) AS total_duration
FROM Calls
GROUP BY person1, person2

分组使用数字(对应原代码查询位置,1开始递增)

SELECT IF(from_id < to_id, from_id, to_id) AS person1, 
	   IF(to_id > from_id, to_id, from_id) AS person2,
	   COUNT(*) AS call_count, 
	   SUM(duration) AS total_duration
FROM Calls
GROUP BY 1, 2
SELECT COUNT(*) AS call_count, 
	   SUM(duration) AS total_duration,
	   IF(from_id < to_id, from_id, to_id) AS person1, 
	   IF(to_id > from_id, to_id, from_id) AS person2
FROM Calls
GROUP BY 3, 4
文章来源:https://blog.csdn.net/weixin_50223520/article/details/135507042
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。