当前位置:Gxlcms > 数据库问题 > [SQL]597(表2行数/表1行数)+602(表的上下拼接)

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

时间:2021-07-01 10:21:17 帮助过:29人阅读

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

技术图片

技术图片

思路:

  1. 统计申请表中的不重复行数,记为表A
  1. <code class="language-mysql">(SELECT COUNT(*)
  2. FROM (SELECT DISTINCT sender_id, send_to_id
  3. FROM friend_request) A)
  4. </code>
  1. 统计接受表中的不重复行数,记为表B
  1. <code class="language-mysql">(SELECT COUNT(*)
  2. FROM (SELECT DISTINCT requester_id, accepter_id
  3. FROM request_accepted) B)
  4. </code>
  1. 表B结果/表A结果,IFNULL(,0)表示为空输出0

最终代码

  1. <code class="language-mysql">SELECT ROUND(IFNULL(
  2. (SELECT COUNT(*)
  3. FROM (SELECT DISTINCT requester_id, accepter_id
  4. FROM request_accepted) B)
  5. /
  6. (SELECT COUNT(*)
  7. FROM (SELECT DISTINCT sender_id, send_to_id
  8. FROM friend_request) A)
  9. ,0) ,2) AS accept_rate;
  10. </code>

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

技术图片

思路:

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

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

将A按照requester_id降序排列

取第一行。

  1. <code class="language-mysql">SELECT A.requester_id AS id, COUNT(A.requester_id) AS num
  2. FROM(
  3. SELECT requester_id
  4. FROM request_accepted
  5. UNION ALL
  6. SELECT accepter_id
  7. FROM request_accepted) A
  8. GROUP BY A.requester_id
  9. ORDER BY num DESC
  10. LIMIT 1;
  11. </code>

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

标签:union   排列   mysql   com   mys   des   class   临时表   select   

人气教程排行