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

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

如果要在model_id中查找特定的"collected_guitar_user",我想获取一个列出数据的派生表。

假设“挡泥板Stratocaster”的模型ID = 200,其中品牌为Fender(品牌表的ID = 1)。
相同的吉他可以制成各种饰面,因此可以使用另一张collected_guitars表。

一个用户可以在他的收藏中拥有此商品

现在,我想通过查看数据透视表“ collected_guitar_user”中的model_id(在这种情况下为200)找到的是与登录用户共享相同genders.sex和hand_types.type的用户收集的Fender Stratocasters的数量。并查看他们所划分的完成程度(完成程度A和B等的百分比)。
因此,用户可以看到对他人正在购买的商品感兴趣,可以看到该模型的一些统计信息。
什么样的查询可以得出这种表?

mysql - 从多对多关系中获取统计信息表-LMLPHP

最佳答案

您可以使用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关联?

关于mysql - 从多对多关系中获取统计信息表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36041102/

10-12 21:51