我很困惑如何获得每个项目的购买数量和。加入3个表,从2个表(MYSQL)的SUM()值
SELECT item_id, item_name, sum(backing_status) purchase_count, sum(vote) vote_count
FROM Items
LEFT JOIN Purchases ON Items.item_id=Purchases.item_id
LEFT JOIN Votes ON Items.item_id=Votes.item_id
where purchase_status='bought'
group by Items.item_id
Table Items
item_id item_name
1 item_1
2 item_2
3 item_3
Table Purchases
item_id purchase_status
1 bought
2 bought
1 bought
Table Votes
item_id vote
1 1
2 1
3 -1
1 -1
1 -1
期望的输出是:
做两简单连接来连接以下3代表由条目在Votes
表中的号码相乘purchase_count
item_id item_name purchase_count vote_count
1 item_1 2 -1 //sum of -2 downvotes + 1 upvote
2 item_2 1 1
3 item_3 0 -1
我可能需要子查询,但不能完全弄清楚查询。或者,还有更好的方法?
你可能只想做2个查询。 – Kevin
@凯文谢谢,你说这是因为性能原因还是更容易代码/数据库维护? –
@timpeterson两者。在一个查询中这样做需要使用2个“子查询”。子查询知道速度较慢,加上使用它们通常会让你的sql代码难以阅读。国际海事组织,它会更容易做一个'选择总和(票)从票'和'选择计数(item_id)从采购'。 – tftd