在我的MySQL数据库中,我有三张桌子。一个是具有ID和更多列的项目列表。第二个是具有名字的用户列表,依此类推。如果用户评价和/或购买了商品,则记录第三条。 rating和buy列的数据类型将是一个位标志(1/0)。
所以,现在我想返回只有一个 SQL查询项目评分的频率以及是否由特定用户评分。
输入参数是:
结果应该是:
答案 0 :(得分:2)
这称为 pivot 。
SELECT item, SUM(rated) AS no_rated, SUM(bought) AS no_bought,
MAX(user = 1 AND rated = 1) AS rated_by_1,
MAX(user = 2 AND rated = 1) AS rated_by_2,
MAX(user = 1 AND bought = 1) AS bought_by_1,
MAX(user = 2 AND bought = 2) AS bought_by_2
FROM YourTable
GROUP BY item
有关在MySQL中进行透视的更多信息,请参阅MySQL pivot table。如果用户数量是动态的,那么您就不能像我一样对它们进行硬编码,那么您需要编写动态SQL。有一些网站链接显示如何在该问题的答案中执行此操作。