如何在 sql 中查询以重新调整查询集



我有一个主键为user_id的用户表和一个主键为item_id的项目表。

然后我有另一个记录表,记录用户何时选择项目(多对多(。 它的属性包括user_iditem_idpick_time

我想得到这样的桌子: 想要的查询结果

其中"1"表示用户至少选择过一次项目,而空白表示没有。
无论如何,请帮助我解决此问题:

  • 如何编写 sql 代码来获取此查询集?
  • 如果在sql查询中无法解决此问题,如何重构我的数据库?

对不起,我的SQL技能和表达能力不佳。

非常感谢!

您可以通过在熊猫中使用pivot_table来实现此目的。

import pandas as pd
data = {"Users": [1,2,3,4,5,1,2,5,1,2,4,5,2,3,4,5,4,5],
"Items": 
['A','A','A','A','A','B','B','B','C','C','C','C','D','D','D','D','E','E']}
users_items_joined = pd.DataFrame(data, columns = ["Users", "Items"])
users_items_joined["count"] = 1

您现在将拥有类似于下面显示的内容,

Users Items  count
0       1     A      1
1       2     A      1
2       3     A      1
3       4     A      1
4       5     A      1
5       1     B      1
6       2     B      1
7       5     B      1
8       1     C      1
9       2     C      1
10      4     C      1
11      5     C      1
12      2     D      1
13      3     D      1
14      4     D      1
15      5     D      1
16      4     E      1
17      5     E      1

您还可以从数据库中检索实际表并将其转换为pandas 数据帧,并对其应用以下函数以获取所需的用户项矩阵。

user_item_matrix = users_items_joined.pivot_table('count', 'Users', 'Items')
print(user_item_matrix)

上面的代码将准确给出您在提供的图像中请求的内容。

Items    A    B    C    D    E
Users                         
1      1.0  1.0  1.0  NaN  NaN
2      1.0  1.0  1.0  1.0  NaN
3      1.0  NaN  NaN  1.0  NaN
4      1.0  NaN  1.0  1.0  1.0
5      1.0  1.0  1.0  1.0  1.0

最新更新