我有一个数据透视表,用于users
和collected_guitars
之间的多对多关系。如您所见,“gather_guitar”是一个引用外表(guitar_models
,finish
)中某些数据的项目。
我的用户在外国表格中也有一些外国数据(hand_types
和genders
)
如果我在model_id
"collected_guitar_user"
,我想获取一个列出数据的派生表
让我们说“Fender Stratocaster”是模型id = 200,其中make是Fender(生成表的id = 1)。
同一把吉他可以有各种各样的完成,因此可以使用另一张表collected_guitars
。
一个用户可以在他的收藏中使用此项目
现在我想通过查看数据透视表中的model_id(在本例中为200)找到“gather_guitar_user”,这是由共享相同genders.sex
和hand_types.type的用户收集的Fender Stratocaster的数量作为登录用户并看看他们分成了什么(完成A和B等的某些百分比......)。
因此,用户可以看到对其他人购买的东西感兴趣可以看到该模型的一些统计数据。
什么查询可以导出这种表?
答案 0 :(得分:0)
您可以使用GROUP BY
语法进行汇总计数,使用CROSS JOIN
计算总计的百分比:
SELECT make.make, models.model_name as model, finish.finish,
COUNT(1) AS number_of_users,
(COUNT(1) / u.total * 100) AS percent_owned
FROM owned_guitar, owned_guitar_users, users, models, make, finish
CROSS JOIN (SELECT COUNT(1) AS total FROM users) u
WHERE users.id = owned_guitar_users.user_id
AND owned_guitar_user.owned_guitar_id = owned_guitar.id
AND owned_guitar.model_id = models.id
AND owned_guitar.make_id = make.id
AND owned_guitar.finish_id = finish.id
GROUP BY owned_guitar.id
请注意,如果用户拥有一把以上的吉他,百分比将不再必然达到统一(例如,杰克和约翰都可以拥有所有五把吉他,所以他们每人都拥有“100%” “吉他”。
我对你的数据库设计也有些困惑。为什么您在finish_id
表格和make_id
表格中直接关联了owned_guitar
和models
?