【发布时间】:2016-08-03 08:41:14
【问题描述】:
所以我需要构建一个工具,根据几个参数对我的客户进行排序,然后将其导出为 CSV。 除了我的 SQL 查询(我一直不擅长)之外,一切都运行良好。
这是我的数据库结构:
- 客户(id、CustomerLogin、CustomerNom、CustomerPrenom、CustomerReference)
- 订单(OrderId、OrderTotal)
- 产品(ProductId,类别)
- OrderProduct(CPId、OrderId、ProductId)
我需要对我的客户进行排序以建立一个邮件列表(CustomerLogin 是一个邮件地址)。 我需要实现的过滤器:
- 订单号
- 订单s总数
- 产品类别
这是我当前的查询(使用一些 php 变量作为总数和类别):
SELECT C.id, C.CustomerReference, C.CustomerNom, C.CustomerPrenom, C.CustomerLogin, O.OrderTotal, O.OrderId
FROM customers C
JOIN orders O
ON C.id = O.CustomerId
JOIN OrderProduct OP
ON O.OrderId = OP.OrderId
JOIN products P
ON OP.ProduitId = P.ProduitId
WHERE O.OrderTotal >= $total
AND P.category IN($product_categories);
所以这会返回订单表中每个客户条目的数据,这些订单按总计和产品类别过滤。 例如:
C.Id, C.ref, C.nom, C.prenom, C.login, O.OrderTotal, O.Id
1 - REF1 - DOE - John - johndoe@gmail.com - 550 - 1
1 - REF1 - DOE - John - johndoe@gmail.com - 150 - 4
1 - REF1 - DOE - John - johndoe@gmail.com - 800 - 8
5 - REF5 - BOND - James - jb@mi6.com - 007 - 25
8 - REF8 - ANOTHER - Dude - adude@gmail.com - 50 - 12
我想得到什么:
C.Id, C.ref, C.nom, C.prenom, C.login, OrdersTotal, OrderNumber
1 - REF1 - DOE - John - johndoe@gmail.com - 1500 - 3
5 - REF5 - BOND - James - jb@mi6.com - 007 - 1
8 - REF8 - ANOTHER - Dude - adude@gmail.com - 50 - 1
问题是我还需要过滤 OrdersTotal 和 OrderNumber,那么如何在“SELECT”中求和并显示,然后在“WHERE”中过滤?这甚至可能吗?我想使用子查询或其他东西,但我很不擅长,所以我可以在这方面使用一些帮助。
抱歉,这个问题太长了,但我需要准确地回答这个问题! 希望你们能理解我的意思并能够帮助我,谢谢!
ps:我已经翻译了我的表名和列名,以便您理解,可能会有一些错误,但它在我这边工作。
更新
感谢Surajit Biswas,这就是解决方案:
SELECT * FROM(
SELECT C.id, C.CustomerReference, C.CustomerNom, C.CustomerPrenom, C.CustomerLogin, SUM(O.OrderTotal) order_total, COUNT(O.CustomerId) nb_com
FROM customers C
JOIN orders O ON C.id = O.CustomerId
JOIN OrderProduct OP ON O.OrderId = OP.OrderId
JOIN products P ON OP.ProduitId = P.ProduitId
WHERE P.category IN($product_categories)
GROUP BY C.id, C.CustomerReference, C.CustomerNom, C.CustomerPrenom, C.CustomerLogin
)A WHERE A.order_total >= $total AND A.nb_com >= $nbcom
一切正常!
所有学分@Surajit Biswas。
【问题讨论】:
-
您需要
GROUP BY。结合SUM()聚合函数! -
感谢 GROUP BY,它将帮助我为每个客户汇总订单!我也在考虑 OrderNumber 的 COUNT() 函数...?