0

嵌套查询的菜鸟问题。这个 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
4

1 回答 1

0

通过查看您的查询,我猜您有一个物品表,其中包含各种可能的可购买物品。其中 item_id = 8 对应于“新”产品,item_id = 13 对应于“续订”。

项目与名为 cart_items 的关系表中的预期销售事件相关联。

但并非所有的购物车都已售出,但我们只想查看实际售出的购物车,因此我们从付款表开始。

通过填充 payment_id 在购物车表中记录是否为预期销售付款。

付款代表已售出的购物车,我们从付款中获取payments.id,我们将payment_id 带到carts 表并获取cart_id,我们将其带到cart_items 表并获取已售出的实际商品,我们想要如果 item_id 为 8 ('New') / 13 ('Renewal'),则单独计算

我们尝试运行的查询是:

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 的次数来总计它。

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

于 2012-04-29T17:37:23.037 回答