返回介绍

solution / 1600-1699 / 1699.Number of Calls Between Two Persons / README

发布于 2024-06-17 01:03:15 字数 2537 浏览 0 评论 0 收藏 0

1699. 两人之间的通话次数

English Version

题目描述

表: Calls

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

 

编写解决方案,统计每一对用户 (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)。

解法

方法一:分组求和统计

我们可以用 if 函数或者 leastgreatest 函数来将 from_idto_id 转换成 person1person2,然后按照 person1person2 分组求和统计即可。

# Write your MySQL query statement below
SELECT
  IF(from_id < to_id, from_id, to_id) AS person1,
  IF(from_id < to_id, to_id, from_id) AS person2,
  COUNT(1) AS call_count,
  SUM(duration) AS total_duration
FROM Calls
GROUP BY 1, 2;
# Write your MySQL query statement below
SELECT
  LEAST(from_id, to_id) AS person1,
  GREATEST(from_id, to_id) AS person2,
  COUNT(1) AS call_count,
  SUM(duration) AS total_duration
FROM Calls
GROUP BY 1, 2;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文