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

力扣题

1、题目地址

1699. 两人之间的通话次数

2、模拟表

表:Calls

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

3、要求

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

以 任意顺序 返回结果表。

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

示例 1:

输入:

Calls 表:

from_id to_id duration
1 2 59
2 1 11
1 3 20
3 4 100
3 4 200
3 4 200
4 3 499

输出:

person1 person2 call_count total_duration
1 2 2 70
1 3 1 20
3 4 4 999

解释:
用户 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

你可能感兴趣的:(#,MySQL,mysql)