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;