MONTH,YEAR的嵌套MYSQL组

时间:2012-04-29 15:10:26

标签: mysql nested

嵌套查询的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

1 个答案:

答案 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的次数来计算总数。

我可能误解了问题域名,所以如果您需要澄清或者我出错了,请告诉我。