[SQL]597(表2行数/表1行数)+602(表的上下拼接)

Posted wyz-2020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[SQL]597(表2行数/表1行数)+602(表的上下拼接)相关的知识,希望对你有一定的参考价值。

597. 好友申请 I :总体通过率

技术图片

技术图片

思路:

  1. 统计申请表中的不重复行数,记为表A
(SELECT COUNT(*)
FROM (SELECT DISTINCT sender_id, send_to_id
      FROM friend_request) A)
  1. 统计接受表中的不重复行数,记为表B
(SELECT COUNT(*)
FROM (SELECT DISTINCT requester_id, accepter_id
      FROM request_accepted) B)
  1. 表B结果/表A结果,IFNULL(,0)表示为空输出0

最终代码

SELECT ROUND(IFNULL(
(SELECT COUNT(*)
FROM (SELECT DISTINCT requester_id, accepter_id
      FROM request_accepted) B)
/
(SELECT COUNT(*)
FROM (SELECT DISTINCT sender_id, send_to_id
      FROM friend_request) A)
,0) ,2) AS accept_rate;

602. 好友申请 II :谁有最多的好友

技术图片

思路:

采用UNION ALL将表的requester_id和accepter_id列上下拼接,并创建临时表A

用COUNT()统计每个requester_id出现的次数

将A按照requester_id降序排列

取第一行。

SELECT A.requester_id AS id, COUNT(A.requester_id) AS num
FROM(
SELECT requester_id
FROM request_accepted
UNION ALL
SELECT accepter_id
FROM request_accepted) A 
GROUP BY A.requester_id
ORDER BY num DESC
LIMIT 1;

以上是关于[SQL]597(表2行数/表1行数)+602(表的上下拼接)的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 对动态表使用案例语句(未知行数)

SQL 计算表中的行数

SQL语句怎么筛选表中某一字段不重复的数据行数?

SQL Server查看所有表大小表行数和占用空间信息

ORACLE怎么用SQL查询多张表和多个时间点的数据的行数?

SQL Server - 使用表触发器记录表插入,更新,删除行数