mysql - 关于自连接的问题。查看两个用户是否交互

标签 mysql sql

我得到了一个 SQL 作业,它是模拟约会应用程序的下表:表名称 = 约会

user_id | viewing_profile_id | date | liked
   1              2             x       yes
   1              3             x       yes
   2              1             x       yes
   2              3             x       no
   3              1             x       no
   3              2             x       no

本质上我想查看彼此匹配的个人资料的百分比。匹配是指两个个人资料彼此相似。

我想我知道我必须做什么。对表本身执行自连接,并在配置文件彼此相似时使用案例。

select t.date, sum(t.match) / count(t.match) as p_match
from (
select s1.user_id, s1.viewing_profile_id, 
date_trunc('day',s1.date) as date, case when s1.liked = 'yes' 
and s2.liked = 'yes' then 1 else 0 end as match
from dating s1
left join dating s2 on s2.ser_id = s1.viewing_profile_id
group by 1,2) t
group by 1

由于这只是一个编造的表,并且我没有任何数据执行此操作,因此我想知道是否可以深入了解这是否有效。

我期望子查询产生如下内容:

user_id | viewing_profile_id | date | match
   1              2             x       1
   1              3             x       0
   2              1             x       1
   2              3             x       0
   3              1             x       0
   3              2             x       0

最佳答案

您需要根据您所具备的条件离开自加入表:

select 
  d1.*,
  case when d2.user_id is null then 0 else 1 end `match`
from dating d1 left join dating d2
on 
  d1.user_id = d2.viewing_profile_id 
  and d1.viewing_profile_id = d2.user_id
  and d1.liked = 'yes' and d2.liked = 'yes'
order by d1.user_id, d1.viewing_profile_id  

请参阅demo .
结果:

| user_id | viewing_profile_id | date | liked | match |
| ------- | ------------------ | ---- | ----- | ----- |
| 1       | 2                  |      | yes   | 1     |
| 1       | 3                  |      | yes   | 0     |
| 2       | 1                  |      | yes   | 1     |
| 2       | 3                  |      | no    | 0     |
| 3       | 1                  |      | no    | 0     |
| 3       | 2                  |      | no    | 0     |

关于mysql - 关于自连接的问题。查看两个用户是否交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56354511/

相关文章:

php - 无法使用 mysqli 发布数据

sql - 将表一值与 postgresql 中的两个不同表进行比较

MySQL服务器全局错误日志

mysql - SQLZoo 自连接教程

php - 检查mysql数据库中是否存在记录

php - 在 codeigniter 中使用逗号分隔值加入查询

SQL整数除法余数

java - 如何将 java 循环与 SQL 条件选择混合

php - 表单值的 SQL 更新不起作用

mysql - CakePHP 3.x 保存新记录以及新的关联记录