MYSQL将所有用户对单个用户购买的物品的总赞成票和反对票相加
Posted
技术标签:
【中文标题】MYSQL将所有用户对单个用户购买的物品的总赞成票和反对票相加【英文标题】:MYSQL sum the total up and down votes by all users for the items bought by a single user 【发布时间】:2012-04-18 19:19:06 【问题描述】:我想仅对单个用户购买的商品的赞成票和反对票合计。我有一张大桌子,所以我不想总结每个人对每个项目的所有投票,只是特定用户购买的项目。
这是我目前的查询:
select SUM(purchaseyesno) AS tots, SUM(rating=1) AS yes, SUM(rating=0) AS no, item_id
from items_purchased
where purchaser_account_id=12373
group by item_id
正如您所料,这些总和只是汇总用户 12373 的信息,因此它只是一个值。我不确定如何获取用户 12373 购买的所有 item_ids 购买。
我确定有某种子查询,我需要包含嵌套的东西,但我一无所知。
这是我希望我的数据看起来的样子,item_id=3,4,5 都是由 user=12373 购买的。而 item_id=1,2,6 被其他用户购买。
item_id tots yes no
3 7 4 2
4 5 1 3
5 1 0 1
想法?
【问题讨论】:
请提供有关您购买的商品表中相关列的更多信息。你有一个 Purchaser_Account 表吗?如果是这样,purcharser_account_id 是唯一相关的字段吗? purchaser_account_id 列上的关系吗? 嗨,这些列都不是键。 purchase_id 是主键。表的名称是items_purchased
。据我所知,我只需要使用这张表,因为 SQL 语句的 SELECT
部分中的所有列都涵盖了我需要的所有列。
【参考方案1】:
select item_id, SUM(purchaseyesno) tots, SUM(rating = 1) yes, SUM(rating = 0) no
from items_purchased
where item_id in (
select item_id from items_purchased
where purchaser_account_id = 12373
)
group by item_id
【讨论】:
嗨,Mosty,抱歉,如果我不清楚,但我确实需要 item_id,因为每个项目都以列表的形式显示给用户。它们没有汇总。我只想统计所有用户的是/否投票,包括用户 12373 对 item_id=3、item_id=4 等的投票。 @MostyMostacho 按 item_id 分组并不意味着所有项目都在一行中。只有具有相同 item_id 的项目才会被组合在一起。 嗨,莫斯蒂,但如果我删除 where 子句,那么我将获得每个项目的所有投票。它不再局限于 user=12373 。在一张大桌子上,这似乎很昂贵。 @timpeterson 好吧,我不明白您的代码有什么问题。解释应该有什么不同。 嗨莫斯蒂,您的最终编辑查询与我上面的查询相同,还是我很困惑?以上是关于MYSQL将所有用户对单个用户购买的物品的总赞成票和反对票相加的主要内容,如果未能解决你的问题,请参考以下文章