嵌套查询的Noob问题。这个SQL查询有点问题。请帮忙。尝试在同一个表中按年计算2个字段。查询在新字段和续订字段中返回相同的结果。
SELECT MONTH(p.created_at) as Month, YEAR(p.created_at) as Year,
(SELECT COUNT(p.id) FROM payments p
INNER JOIN carts c ON c.payment_id = p.id
INNER JOIN cart_items ci on ci.cart_id = c.id
WHERE ci.item_id = 8) as 'New',
(SELECT COUNT(p.id) FROM payments p
INNER JOIN carts c ON c.payment_id = p.id
INNER JOIN cart_items ci on ci.cart_id = c.id
WHERE ci.item_id = 13) as 'Renewal',
FROM payments p
GROUP BY month, year
感谢您的帮助!
查询示例
Month Year New Renewal
1 2010 1169 556
1 2011 1169 556
1 2012 1169 556
2 2010 1169 556
2 2011 1169 556
答案 0 :(得分:0)
从查看您的查询我猜你有一个物品表,其中包含各种可购买的物品。其中item_id = 8对应于“新”产品,而item_id = 13对应于“续订”。
项目与名为cart_items的关系表中的预期销售事件相关联。
但并非所有推车都被出售,但我们只想看看实际售出的推车,所以我们从支付表开始。
通过填写payment_id,可以在购物车表中记录预付款是否付款。
付款代表已售出的购物车,我们从付款中获取payment.id,我们将payment_id带到购物车表并获取我们带到cart_items表的cart_id并获取已售出的实际商品,以及如果item_id是8('新')/ 13('续订')
我们想要单独计算我们尝试运行的查询是:
SELECT MONTH(p.created_at) as Month,
YEAR(p.create_at) as Year,
sum(if(ci.item_id = 8, 1, 0)) as New,
sum(if(ci.item_id = 13, 1, 0)) as Renewal
FROM payments p,
INNER JOIN carts c on c.payment_id = p.id
INNER JOIN cart_items ci on ci.cart_id = c.id
WHERE ci.item_id in (8,13)
GROUP BY month, year;
我们得到整个数据集,我们按照我们想要分组的字段进行分组,然后通过计算看到item_id = 8 / item_id = 13的次数来计算总数。
我可能误解了问题域名,所以如果您需要澄清或者我出错了,请告诉我。