返回介绍

solution / 2700-2799 / 2720.Popularity Percentage / README

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

2720. 受欢迎度百分比

English Version

题目描述

表:Friends

+-------------+------+
| 列名    | 类型  |
+-------------+------+
| user1     | int  |
| user2     | int  |
+-------------+------+
(user1, user2) 是该表的主键(具有唯一值的列)。 
每一行包含关于朋友关系的信息,其中 user1 和 user2 是朋友。 

编写一条 SQL 查询,找出 Meta/Facebook 平台上每个用户的受欢迎度的百分比。受欢迎度百分比定义为用户拥有的朋友总数除以平台上的总用户数,然后乘以 100,并 四舍五入保留 2 位小数 

返回按照 user1 升序 排序的结果表。

查询结果格式如下示例所示。

 

示例 1:

输入: 
Friends 表:
+-------+-------+
| user1 | user2 | 
+-------+-------+
| 2     | 1     | 
| 1     | 3     | 
| 4     | 1     | 
| 1     | 5     | 
| 1     | 6     |
| 2     | 6     | 
| 7     | 2     | 
| 8     | 3     | 
| 3     | 9     |  
+-------+-------+
输出:
+-------+-----------------------+
| user1 | percentage_popularity |
+-------+-----------------------+
| 1   | 55.56                 |
| 2   | 33.33                 |
| 3   | 33.33                 |
| 4   | 11.11                 |
| 5   | 11.11                 |
| 6   | 22.22                 |
| 7   | 11.11                 |
| 8   | 11.11                 |
| 9   | 11.11                 |
+-------+-----------------------+
解释:
平台上总共有 9 个用户。
- 用户 "1" 与 2、3、4、5 和 6 是朋友。因此,用户 1 的受欢迎度百分比计算为(5/9)* 100 = 55.56。
- 用户 "2" 与 1、6 和 7 是朋友。因此,用户 2 的受欢迎度百分比计算为(3/9)* 100 = 33.33。
- 用户 "3" 与 1、8 和 9 是朋友。因此,用户 3 的受欢迎度百分比计算为(3/9)* 100 = 33.33。
- 用户 "4" 与 1 是朋友。因此,用户 4 的受欢迎度百分比计算为(1/9)* 100 = 11.11。
- 用户 "5" 与 1 是朋友。因此,用户 5 的受欢迎度百分比计算为(1/9)* 100 = 11.11。
- 用户 "6" 与 1 和 2 是朋友。因此,用户 6 的受欢迎度百分比计算为(2/9)* 100 = 22.22。
- 用户 "7" 与 2 是朋友。因此,用户 7 的受欢迎度百分比计算为(1/9)* 100 = 11.11。
- 用户 "8" 与 3 是朋友。因此,用户 8 的受欢迎度百分比计算为(1/9)* 100 = 11.11。
- 用户 "9" 与 3 是朋友。因此,用户 9 的受欢迎度百分比计算为(1/9)* 100 = 11.11。 
user1 按升序排序。

解法

方法一

# Write your MySQL query statement below
WITH
  F AS (
    SELECT * FROM Friends
    UNION
    SELECT user2, user1 FROM Friends
  ),
  T AS (SELECT COUNT(DISTINCT user1) AS cnt FROM F)
SELECT DISTINCT
  user1,
  ROUND(
    (COUNT(1) OVER (PARTITION BY user1)) * 100 / (SELECT cnt FROM T),
    2
  ) AS percentage_popularity
FROM F
ORDER BY 1;

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

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

发布评论

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