首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -根据特定条件选择和金额

MySQL -根据特定条件选择和金额
EN

Stack Overflow用户
提问于 2015-01-02 05:21:43
回答 2查看 183关注 0票数 0

我已经搜索了几个小时了,但是无法找到我正在研究的特定算法的相对解决方案。为了简化障碍,我只想在一张表格中介绍这些信息。

代码语言:javascript
复制
_____________________________________
|  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完成,或者是否需要有单独的查询并将行存储到数组中并逐一进行比较。

到目前为止,我尝试了以下几点:

代码语言:javascript
复制
SELECT * FROM table where SUM(price) as Total >= 300 AND SUM(qty) <=3;

在研究之后,我还尝试了以下几点:

代码语言:javascript
复制
SELECT SUM(price) as Total FROM table WHERE SUM(qty) <=3;

我一直在MySQL shell中出现语法错误。你不必为我解决问题,但如果你能指导我如何解决问题的逻辑,我会非常感激的。

最后,我想问一次,我能否仅用MySQL来解决这个问题,还是需要将行存储到PHP数组中并比较每个索引?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-02 05:27:54

不能在WHERE子句中使用聚合函数,必须使用HAVINGWHERE在选择期间对单个行进行操作,HAVING在聚合后对最终结果进行操作。

代码语言:javascript
复制
SELECT *, SUM(price*qty) as Total
FROM table
GROUP BY user
HAVING Total >= 300 AND SUM(qty) <= 3
票数 3
EN

Stack Overflow用户

发布于 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:

代码语言:javascript
复制
SELECT USER, SUM(PRICE) 
FROM table
GROUP BY user
HAVING SUM(PRICE) >= 300 AND SUM(QTY) <= 3

关于问题2:

代码语言:javascript
复制
SELECT USER, SUM(PRICE) 
FROM table
GROUP BY user
HAVING SUM(PRICE) >= 275AND SUM(QTY) >=7
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27737693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档