美文网首页
sql中的C52怎样处理

sql中的C52怎样处理

作者: 大道至简_6a43 | 来源:发表于2020-07-01 16:59 被阅读0次

    当一个需求让我们从一个集合中抽取两个数据,这个过程怎么办?如果是写代码这个需求很容易实现但当让我们写sql时怎么办呢?

    主要的思路是将这一个表让他跟自身进行join,

    这是张三最近的几张路线订单,从他的五条线路中随机抽取两条,求任意两个线路出现的次数

    张三 line1

    张三 line2

    张三 line3

    张三 line4

    张三 line5

    相当于是N取2问题,写代码容易实现但是在sql中怎么实现呢?

    join

    用这张表跟自身进行joinjoin条件为 name相同,但是会出现一种问题,同样的两条路线只是前后顺序不同会算两次

    怎么办呢?

    给他们再加一列限定条件即可,

    and A.rank>B.rank

    张三 line1 张三 line4

    张三 line2 张三 line4

    张三 line3 张三 line4

    张三 line4 张三 line4

    张三 line5 张三 line5

    rank rank

    1 张三 line1 1 张三 line4

    2 张三 line2 2 张三 line4

    3 张三 line3 3 张三 line4

    4 张三 line4 4 张三 line4

    5 张三 line5 5 张三 line5

    table_A join table_B

    on A.name=B.name where A.line!=B.line and A.rank>B.rank

    加rank的方法可以使用窗口函数

    row_number() over(partition by name)即可

    相关文章

      网友评论

          本文标题:sql中的C52怎样处理

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