sql中的C52怎样处理

2020-07-01  本文已影响0人  大道至简_6a43

当一个需求让我们从一个集合中抽取两个数据,这个过程怎么办?如果是写代码这个需求很容易实现但当让我们写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)即可

上一篇 下一篇

猜你喜欢

热点阅读