如何计算两个值在SQL中的按对象分组内出现的次数?

时间:2019-06-26 20:40:46

标签: mysql 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        |

1 个答案:

答案 0 :(得分:1)

还没有(答案);评论太久了:

您需要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    |