同时选择count / sum和true / false bit-flag

时间:2014-09-11 13:03:21

标签: mysql sql count sum

在我的MySQL数据库中,我有三张桌子。一个是具有ID和更多列的项目列表。第二个是具有名字的用户列表,依此类推。如果用户评价和/或购买了商品,则记录第三条。 rating和buy列的数据类型将是一个位标志(1/0)。

rating table

所以,现在我想返回只有一个 SQL查询项目评分的频率以及是否由特定用户评分。

输入参数是:

  • 用户
  • 项目

结果应该是:

  • 计数(评级)
  • true / false(由指定用户评分)

enter image description here

1 个答案:

答案 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。有一些网站链接显示如何在该问题的答案中执行此操作。