MYSQL组,通过将子句unsing MIN和MAX用于一个范围
查询:MYSQL组,通过将子句unsing MIN和MAX用于一个范围,mysql,having-clause,Mysql,Having Clause,查询: SELECT product_cd, SUM(avail_balance) prod_balance FROM account WHERE status = 'ACTIVE' GROUP BY product_cd HAVING MIN(avail_balance) >= 1000 AND MAX(avail_balance) <= 10000; 结果: +------------+--------------+ | product_cd | prod_balance |
SELECT product_cd, SUM(avail_balance) prod_balance
FROM account
WHERE status = 'ACTIVE'
GROUP BY product_cd
HAVING MIN(avail_balance) >= 1000
AND MAX(avail_balance) <= 10000;
结果:
+------------+--------------+
| product_cd | prod_balance |
+------------+--------------+
| CD | 19500.00 |
| MM | 17045.14 |
+------------+--------------+
我的理解是,从上面的问题来看:
SELECT product_cd, SUM(avail_balance) prod_balance
FROM account
WHERE status = 'ACTIVE'
GROUP BY product_cd
其结果是:
+------------+--------------+
| product_cd | prod_balance |
+------------+--------------+
| BUS | 9345.55 |
| CD | 19500.00 |
| CHK | 73008.01 |
| MM | 17045.14 |
| SAV | 1855.76 |
| SBL | 50000.00 |
+------------+--------------+
我的困惑是:
HAVING MIN(avail_balance) >= 1000
AND MAX(avail_balance) <= 10000;
最小值(有效余额)>=1000
和MAX(avail_balance)代替MIN(avail_balance)和MIN(avail_balance),试试看
最小值(总和(有效余额))>=1000
和MAX(SUM(avail_balance))您希望总的或最小或最大的avail_balance匹配某个范围吗?它们是不同的东西
例如,产品CD总共有19500张,最少1500张,最多10000张。您正在显示总数(SUM
),但希望看到产品最小值(MIN
)大于等于1000,产品最大值(MAX
)大于等于1000的结果
和SUM(avail_balance)您的分组不正确。由于您是按product\u cd
进行分组的,因此您将获得每个分组中所有记录的最大/最小值,而不管哪个用户实际拥有这些记录。另外,have
基本上是在查询处理的最后一个阶段应用的,就在向用户发送数据之前。这意味着过滤器将在所有sum/where填充完成后应用,这也意味着通常会排除的任何值都将包含在任何聚合结果中,例如sum()
。
HAVING MIN(avail_balance) >= 1000
AND MAX(avail_balance) <= 10000;
HAVING MIN(SUM(avail_balance)) >=1000
and MAX(SUM(avail_balance)) <=10000
SELECT
product_cd,
SUM(avail_balance) AS prod_balance
FROM account
WHERE status = 'ACTIVE'
GROUP BY product_cd
HAVING SUM(avail_balance) >= 1000
AND SUM(avail_balance) <= 10000;