我已经搜索了几个小时了,但是无法找到我正在研究的特定算法的相对解决方案。为了简化障碍,我只想在一张表格中介绍这些信息。
_____________________________________
| User | Item | price | qty |
-------------------------------------
| Annie | Dress | 80 | 1 |
| Bob | Jeans | 65 | 3 |
| Cathy | Shoes | 60 | 4 |
| David | Shirts | 40 | 6 |
| Annie | Shoes | 60 | 2 |
| Bob | Shirts | 55 | 2 |
| Cathy | Jeans | 65 | 1 |
| David | Ties | 20 | 5 |
-------------------------------------问题1:向用户展示他们在商店购物的总价格是300或更多,并且购买的数量少于或等于3。这些购物者将以40美元的价格邮寄一张优惠券。
问题2:显示用户的总数量大于或等于7,价格总额为275或更多。这些购物者将邮寄一张20美元的优惠券。
表中的行不是事务特定的。该表可以在一个月内表示单独的事务。我们只是想找一些我们想和我们一起购物的退货顾客。
我不确定这是否只能通过MySQL完成,或者是否需要有单独的查询并将行存储到数组中并逐一进行比较。
到目前为止,我尝试了以下几点:
SELECT * FROM table where SUM(price) as Total >= 300 AND SUM(qty) <=3;在研究之后,我还尝试了以下几点:
SELECT SUM(price) as Total FROM table WHERE SUM(qty) <=3;我一直在MySQL shell中出现语法错误。你不必为我解决问题,但如果你能指导我如何解决问题的逻辑,我会非常感激的。
最后,我想问一次,我能否仅用MySQL来解决这个问题,还是需要将行存储到PHP数组中并比较每个索引?
发布于 2015-01-02 05:27:54
不能在WHERE子句中使用聚合函数,必须使用HAVING。WHERE在选择期间对单个行进行操作,HAVING在聚合后对最终结果进行操作。
SELECT *, SUM(price*qty) as Total
FROM table
GROUP BY user
HAVING Total >= 300 AND SUM(qty) <= 3发布于 2015-01-02 05:39:12
SUM是一个聚合函数,这意味着它适用于一组带俱乐部的行。假设我是根据名称对表数据进行分组,那么sum函数将对一个名称的所有price进行求和。尽管如此,如果您在逻辑上认为将sum(price)放在WHERE子句中没有任何意义,因为where子句将不知道要操作哪个SUM( NAME )(where子句只在临时视图生成之后才能运行)。所以我们在SQL中有HAVING子句。这被用来比较聚集的每一步的聚集函数的结果。
如下所示:在where子句中,当您的DB中的ANNIE行被返回时,它不知道SUM(PRICE)是什么意思。在her子句中,SUM(PRICE)>300条件只有在SQL完成将所有安妮数据分组并计算出她的和(价格)时才执行。
关于问题1:
SELECT USER, SUM(PRICE)
FROM table
GROUP BY user
HAVING SUM(PRICE) >= 300 AND SUM(QTY) <= 3关于问题2:
SELECT USER, SUM(PRICE)
FROM table
GROUP BY user
HAVING SUM(PRICE) >= 275AND SUM(QTY) >=7https://stackoverflow.com/questions/27737693
复制相似问题