首页 > 解决方案 > 如何计算SQL中按对象分组内出现两个值的次数?

问题描述

我有两个表(用户和会话)。users 表包含用户(user1 和 user2 以及他们的 id)的组合。从会话表中,我想按 sessionID 分组,并计算用户表中的对出现在会话表中的对象分组中的次数。

例如,让我们取用户表中的第一对 (xxx, yyy)。现在,这对存在于 sessionID 1000 和 2000 中。因此,我希望该对的用户表中的 #sessions 具有 2 作为值。同样,对于所有对。

我有一个粗略的想法是对 sessionID 进行分组,看看用户表中的对是否存在于按对象分组的对象中,如果是,则将该组计为 1,并对包含该对的所有组求和。在这对发生的 2 次中,user1 点击了多少次 (user1clicks) 以及 user2 点击了多少次 (user2clicks)。

我无法将其翻译成查询。真的很难解决这个问题......非常感谢任何帮助!

用户表:

| user1 | id1 | user2 | id2 | 
-----------------------------
| xxx   | 1   | yyy   | 2   |
| xxx   | 1   | zzz   | 3   |
| yyy   | 2   | zzz   | 3   |

会话表:

| user |  id   | sessionID | clicked |
--------------------------------------
| xxx  |  1    |  1000     |  yes    |
| yyy  |  2    |  1000     |   no    |
| xxx  |  1    |  2000     |   no    |
| yyy  |  2    |  2000     |   no    |
| xxx  |  1    |  3000     |   no    |
| zzz  |  1    |  3000     |  yes    |

输出:

| user1 | id1 | user2 | id2 | #sessions | user1clicks | user2clicks|
--------------------------------------------------------------------
| xxx   | 1   | yyy   | 2   |     2     |  1          |   0        |
| xxx   | 1   | zzz   | 3   |     1     |  1          |   0        |
| yyy   | 2   | zzz   | 3   |     0     |  0          |   0        |

标签: mysqlsql

解决方案


(还)没有答案;太长的评论:

你需要3张桌子;

users
user_id | user
-----------------------------
       1 | xxx  
       2 | yyy   
       3 | zzz   

combinations 
user_id1 | user_id2 
-----------------------------
       1   | 2   
       1   | 3   
       2   | 3   

sessions 
session_id    | user_id   | sessionID | clicked |
--------------------------------------
101    |  1    |  1000     |  yes    |
102    |  2    |  1000     |   no    |
103    |  1    |  2000     |   no    |
104    |  2    |  2000     |   no    |
105    |  1    |  3000     |   no    |
105    |  1    |  3000     |  yes    |

推荐阅读