• SQL学习笔记:利用表自连接求共同好友


    一、背景

    如何求微信的共同好友?

    二、实操

    1.建立测试表

    -- 建立测试表
    CREATE TABLE wechat_friends 
    (
        uid BIGINT, 
        tuid BIGINT
    );
    
    -- 插入数据
    INSERT INTO wechat_friends(uid, tuid)
    VALUES
    (100,200),
    (100,300),
    (100,400),
    (200,100),
    (200,300),
    (200,400),
    (300,100),
    (300,200),
    (400,100);
    
    -- 查询
    SELECT * FROM wechat_friends;
    

    2.分析

    uid 表示每个用户在微信后台的用户 id

    tuid 表示 uid 对应的微信好友 id

    tuid 好友1 好友2
    200 100 300
    300 100 200

    再对好友1、好友2进行 group by 操作,计算 tuid 个数即可。

    3.自连接

    -- 自连接
    SELECT a.uid AS a_uid,
           a.tuid AS a_tuid,
           b.uid AS b_uid,
           b.tuid AS b_tuid
    FROM
    (
        SELECT * FROM wechat_friends
    ) a
    INNER JOIN
    (
        SELECT * FROM wechat_friends
    ) b
    ON a.tuid = b.tuid -- 21行
    AND a.uid < b.uid -- 6行
    

    4.分组统计

    SELECT a_uid,
           b_uid,
           COUNT(a_tuid) AS cnt
    FROM
    (
    	SELECT a.uid AS a_uid,
    	       a.tuid AS a_tuid,
    	       b.uid AS b_uid,
    	       b.tuid AS b_tuid
    	FROM
    	(
    	    SELECT * FROM wechat_friends
    	) a
    	INNER JOIN
    	(
    	    SELECT * FROM wechat_friends
    	) b
    	ON a.tuid = b.tuid -- 21行
    	AND a.uid < b.uid -- 6行
    ) dd
    GROUP BY a_uid, b_uid
    /*
    a_uid	b_uid	cnt
    100	200	2
    100	300	1
    200	300	1
    200	400	1
    300	400	1
    */
    

    参考链接:一道求微信共同好友数的SQL题

  • 相关阅读:
    qt5--数据类型转换
    qt5-QWidget坐标系统和大小和展示区域
    qt5---布局
    qt5-信号和槽
    tomcat中文请求乱码问题
    centos安装ab测试工具
    golang学习之go简单博客应用
    nodejs的jsonrpc调用
    centos下mongodb安装
    使用connect-multiparty限制nodejs图片上传
  • 原文地址:https://www.cnblogs.com/hider/p/15771855.html
Copyright © 2020-2023  润新知