mysql - MySQL 中的计数问题

标签 mysql

我试图解决一个问题,但我需要帮助:)

实际上这个查询有效,我在最后几列中有所有销售额的总和:

SELECT DISTINCT epps.SKU, epc.name , 
                 COUNT(*) FROM ERP_CUSTOMER_ORDER eco
                INNER JOIN ERP_CUSTOMER_ORDER_ITEMS_2 ecoi2 ON ecoi2.ERP_CUSTOMER_ORDER_index = eco.`index`
                INNER JOIN ERP_PROD_PRODUCT_SIZES epps ON ecoi2.prod_index = epps.ID
                INNER JOIN ERP_PROD_CATALOG epc ON epps.`SKUf ID`= epc.`index`

                        WHERE (eco.state = "processing" OR eco.state= "complete")
                            AND eco.created_at > DATE_ADD("2015-11-06",INTERVAL 12 HOUR)
                            AND eco.created_at < DATE_ADD("2015-12-06",INTERVAL 12 HOUR)
                            AND epc.attribute_set = "Contact Lenses"
                            AND eco.order_location = "KL"

GROUP BY epps.SKU
ORDER BY COUNT(*) DESC

Result of this query

我想要每 30 天销售的产品数量。我还想要上个月销售的产品数量。然而它不起作用。这是我的新查询:

我想比较两个不同月份的销售额

SELECT DISTINCT epps.SKU, epc.name , 
                (SELECT COUNT(*) FROM ERP_CUSTOMER_ORDER eco
                INNER JOIN ERP_CUSTOMER_ORDER_ITEMS_2 ecoi2 ON ecoi2.ERP_CUSTOMER_ORDER_index = eco.`index`
                INNER JOIN ERP_PROD_PRODUCT_SIZES epps ON ecoi2.prod_index = epps.ID
                INNER JOIN ERP_PROD_CATALOG epc ON epps.`SKUf ID`= epc.`index`

                        WHERE (eco.state = "processing" OR eco.state= "complete")
                            AND eco.created_at > DATE_ADD("2015-11-06",INTERVAL 12 HOUR)
                            AND eco.created_at < DATE_ADD("2015-12-06",INTERVAL 12 HOUR)
                            AND epc.attribute_set = "Contact Lenses"
                            AND eco.order_location = "KL"
                            ),


                            (SELECT COUNT(*) FROM ERP_CUSTOMER_ORDER eco
                INNER JOIN ERP_CUSTOMER_ORDER_ITEMS_2 ecoi2 ON ecoi2.ERP_CUSTOMER_ORDER_index = eco.`index`
                INNER JOIN ERP_PROD_PRODUCT_SIZES epps ON ecoi2.prod_index = epps.ID
                INNER JOIN ERP_PROD_CATALOG epc ON epps.`SKUf ID`= epc.`index`

                        WHERE (eco.state = "processing" OR eco.state= "complete")
                            AND eco.created_at > DATE_ADD("2015-10-06",INTERVAL 12 HOUR)
                            AND eco.created_at < DATE_ADD("2015-11-06",INTERVAL 12 HOUR)
                            AND epc.attribute_set = "Contact Lenses"
                            AND eco.order_location = "KL"
                            )
FROM ERP_CUSTOMER_ORDER eco
                INNER JOIN ERP_CUSTOMER_ORDER_ITEMS_2 ecoi2 ON ecoi2.ERP_CUSTOMER_ORDER_index = eco.`index`
                INNER JOIN ERP_PROD_PRODUCT_SIZES epps ON ecoi2.prod_index = epps.ID
                INNER JOIN ERP_PROD_CATALOG epc ON epps.`SKUf ID`= epc.`index`                                          
GROUP BY epps.SKU 
ORDER BY COUNT(*) DESC

Result of this query

我使用了大致相同的框架,但我无法得到与以前相同的结果。

非常感谢! 纪尧姆

最佳答案

在这里,性能是您的主要关注点吗?如果没有,使用两个子查询并将它们连接起来可能会很好。像这样(未经测试):

SELECT * from
(
SELECT DISTINCT epps.SKU, epc.name , 
                 COUNT(*) FROM ERP_CUSTOMER_ORDER eco
                INNER JOIN ERP_CUSTOMER_ORDER_ITEMS_2 ecoi2 ON ecoi2.ERP_CUSTOMER_ORDER_index = eco.`index`
                INNER JOIN ERP_PROD_PRODUCT_SIZES epps ON ecoi2.prod_index = epps.ID
                INNER JOIN ERP_PROD_CATALOG epc ON epps.`SKUf ID`= epc.`index`

                        WHERE (eco.state = "processing" OR eco.state= "complete")
                            AND eco.created_at > DATE_ADD("2015-11-06",INTERVAL 12 HOUR)
                            AND eco.created_at < DATE_ADD("2015-12-06",INTERVAL 12 HOUR)
                            AND epc.attribute_set = "Contact Lenses"
                            AND eco.order_location = "KL"

GROUP BY epps.SKU
ORDER BY COUNT(*) DESC
) a
inner join 
(
SELECT DISTINCT epps.SKU, epc.name , 
                 COUNT(*) FROM ERP_CUSTOMER_ORDER eco
                INNER JOIN ERP_CUSTOMER_ORDER_ITEMS_2 ecoi2 ON ecoi2.ERP_CUSTOMER_ORDER_index = eco.`index`
                INNER JOIN ERP_PROD_PRODUCT_SIZES epps ON ecoi2.prod_index = epps.ID
                INNER JOIN ERP_PROD_CATALOG epc ON epps.`SKUf ID`= epc.`index`

                        WHERE (eco.state = "processing" OR eco.state= "complete")
                            AND eco.created_at > DATE_ADD("2015-10-06",INTERVAL 12 HOUR)
                            AND eco.created_at < DATE_ADD("2015-11-06",INTERVAL 12 HOUR)
                            AND epc.attribute_set = "Contact Lenses"
                            AND eco.order_location = "KL"

GROUP BY epps.SKU
ORDER BY COUNT(*) DESC
) b
on a.SKU = b.SKU and a.name = b.name

请注意,如果您的数据中没有零值,则此查询将不起作用(例如,对于没有销售任何镜片的月份,如果您没有行,则此查询将不会返回任何一个月的结果因为内部连接)。

关于mysql - MySQL 中的计数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34130437/

相关文章:

python - Alembic 检测表已经存在,所以它试图再次创建它们

mysql - 连接速度慢,varchar 列上未使用索引

mysql - SQL - 在列中选择相同的值然后重命名它们

php - 大数据库与多个数据库

mysql - 即使使用索引更新查询也需要时间

php - 向所有 json_encode() 数据添加一个通用词

php - MySql 如何插入或更新 IF 重复的 2 个字段?

mysql - 选择一行时增加一个值 SQL

php - 在 MySQL 中存储 0.00001

php - 删除 php mysql 中的引号