美文网首页
sql写出网吧用户中两人一定认识的组合数

sql写出网吧用户中两人一定认识的组合数

作者: 扎西的德勒 | 来源:发表于2020-07-21 11:14 被阅读0次

题目:

现有城市网吧访问数据,字段:网吧id,访客id(身份证号),上线时间,下线时间
规则1、如果有两个用户在一家网吧的前后上下线时间在10分钟以内,则两人可能认识
规则2、如果这两个用户在三家以上网吧出现【规则1】的情况,则两人一定认识
需求:
该城市上网用户中两人一定认识的组合数
该题可以选用自己擅长的任何技术来解决,可以是JAVA、Python、C、C++编程语言,也可以是Hadoop,Spark大数据工具

参考答案:

数据库版本:Server version: 8.0.20 MySQL Community Server - GPL

建表语句

create table test_network_bar_info(
    bar_id int comment '网吧id',
    user_id int comment '访客id-身份证号',
    login_time timestamp comment '上线时间',
    logout_time timestamp comment '下线时间'
);

数据准备

insert into test_network_bar_info values (1,110001,'2020-01-01 12:10:00','2020-01-01 12:30:00');
insert into test_network_bar_info values (1,110001,'2020-01-01 12:35:00','2020-01-01 12:40:00');
insert into test_network_bar_info values (1,110002,'2020-01-01 12:50:00','2020-01-01 12:55:00');
insert into test_network_bar_info values (1,110001,'2020-01-01 13:00:00','2020-01-01 13:10:00');
insert into test_network_bar_info values (1,110003,'2020-01-01 12:15:00','2020-01-01 13:15:00');

insert into test_network_bar_info values (2,110001,'2020-01-02 12:10:00','2020-01-02 12:30:00');
insert into test_network_bar_info values (2,110001,'2020-01-02 12:35:00','2020-01-02 12:40:00');
insert into test_network_bar_info values (2,110001,'2020-01-02 12:50:00','2020-01-02 12:55:00');
insert into test_network_bar_info values (2,110002,'2020-01-02 13:00:00','2020-01-02 13:10:00');

insert into test_network_bar_info values (3,110001,'2020-01-03 12:10:00','2020-01-03 12:30:00');
insert into test_network_bar_info values (3,110003,'2020-01-03 12:15:00','2020-01-03 12:40:00');
insert into test_network_bar_info values (3,110001,'2020-01-03 12:50:00','2020-01-03 12:55:00');
insert into test_network_bar_info values (3,110002,'2020-01-03 13:00:00','2020-01-03 13:10:00');

查询逻辑

select
    C.user_group,
    COUNT(DISTINCT C.bar_id)
from
(select
    distinct
    A.bar_id,
    case when A.user_id > B.user_id then CONCAT(B.user_id,A.user_id)
    when A.user_id < B.user_id then CONCAT(A.user_id,B.user_id)
    else 'NA' end as user_group
from
(select
    bar_id,
    user_id,
    login_time,
    logout_time
from test_network_bar_info)A
inner join
(select
    bar_id,
    user_id,
    login_time,
    logout_time
from test_network_bar_info)B
on A.bar_id = B.bar_id
and A.user_id <> B.user_id
and (ABS(timestampdiff(second ,A.login_time,B.login_time)) <= 600
         or ABS(timestampdiff(second ,A.logout_time,B.logout_time)) <= 600))C
GROUP BY C.user_group;

https://blog.csdn.net/weixin_43619485/java/article/details/107164729

相关文章

  • sql写出网吧用户中两人一定认识的组合数

    题目: 现有城市网吧访问数据,字段:网吧id,访客id(身份证号),上线时间,下线时间规则1、如果有两个用户在一家...

  • 数据聚合

    使用Python来聚合数据,和SQL中的GROUP BY字句类似。

  • Linux用户基础

    认识Linux中的用户和组 实践: 查看用户信息 查看用户密码信息 查看组信息 查看登录的用户 实践: 用户的增,...

  • DbFlow

    cardContactModels 为集合数据 DbFlow sql转化特例1 DbFlow sql转化特例2

  • sql注入

    sql注入总结图 写出sql注入原理 注射式攻击的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明。...

  • 2018-08-27-Oracle学习的一天

    1、sql plus中怎么连接用户或切换用户:在sql plus中输入connect 用户名/密码 --连接指定...

  • SqlServer中服务器角色和数据库角色权限详解

    数据库角色的成员可以分为如下几类: **1、Windows用户组或用户账户 ** 2、SQL Server登录 ...

  • 2016.12.23

    SpringMVC中的Interceptor主要作用是拦截用户的请求并进行相应的处理 关于Update的sql一定...

  • Python的数据聚类

    Python 的 groupby() 函数和SQL中的很像,都是聚类函数,按照一定的function将一组数据集合...

  • (4)SparkSQL中如何定义UDF和使用UDF

    Spark SQL中用户自定义函数,用法和Spark SQL中的内置函数类似;是saprk SQL中内置函数无法满...

网友评论

      本文标题:sql写出网吧用户中两人一定认识的组合数

      本文链接:https://www.haomeiwen.com/subject/jpfikktx.html