从多对多关系获取统计信息表格

时间:2016-03-16 16:10:49

标签: mysql eloquent statistics pivot-table

我有一个数据透视表,用于userscollected_guitars之间的多对多关系。如您所见,“gather_guitar”是一个引用外表(guitar_modelsfinish)中某些数据的项目。

我的用户在外国表格中也有一些外国数据(hand_typesgenders

如果我在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等的某些百分比......)。 因此,用户可以看到对其他人购买的东西感兴趣可以看到该模型的一些统计数据。 什么查询可以导出这种表?

enter image description here

1 个答案:

答案 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_guitarmodels