sql-server - 查询行之间的关系
解决方案
这有点复杂,所以我将它分解为多个子查询,供您使用具有匹配键的 CTE。
这将产生一系列匹配的对 - 主要客人和次要客人的比例是他们在一起的频率,而不仅仅是入住。
设置:
create table temp(
hotelID integer,
checkInDate date,
guestID integer
)
insert into temp values (101, '2020/06/01', 123)
insert into temp values (101, '2020/06/01', 456)
insert into temp values (102, '2020/06/15', 123)
insert into temp values (102, '2020/06/15', 456)
insert into temp values (103, '2020/06/30', 123)
insert into temp values (103, '2020/06/30', 456)
insert into temp values (104, '2020/07/15', 123)
insert into temp values (104, '2020/07/15', 789)
insert into temp values (105, '2020/07/01', 456)
insert into temp values (105, '2020/07/01', 789)
询问:
with keyCte as (
select
distinct cast(hotelID as varchar(3)) + cast(checkInDate as varchar(10)) as myKey,
guestID
from temp
)
select
guestPrime
, guestTwo
, instances as guestPrimeStays
, matches as guestTwoMatches
, cast(matches as float) / cast(instances as float) as hitRate
from (
select
guestID
, count(*) as instances
from keyCte
group by guestID
) sq3
join (
select
guestPrime
, guestTwo
, count(*) as matches
from (
select
keyCte.guestID as guestPrime
, kcte.guestID as guestTwo
from keyCte
join keyCte kcte on kcte.myKey = keyCte.myKey and kcte.guestID != keyCte.guestID
) sq
group by guestPrime, guestTwo
) sq2 on sq2.guestPrime = guestID
推荐阅读
- java - actionListener 和循环与 if-else 的组合
- c - C 编程:参数:无法转换为 int*
- c++ - 如何编写工厂方法;我在遵循 C++ 代码时出错
- node.js - WebSocket 错误,意外响应代码:200 与 Nginx 和 Node.js
- javascript - 在容器上设置的点击事件,正在子元素上调用并破坏逻辑
- python - Makedirs 正在创建文件而不是文件夹
- java - 如何在 JSP 中的表单的值字段中显示包含空格的字符串变量?
- django - Django返回响应而不通过views.py
- java - 您如何通过流程构建器将输入发送到 jar,同时还接收来自 jar 的输出
- python - 在第 21 行,它说存在语法错误。错误代码 e0001