- where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
- having是对group by的结果进行筛选
例如一个学生表查询男生的总数
方案一
select count(*) from students where gender=1;
方案二:
select gender as 性别,count(*)
from students
group by gender
having gender=1;
这个例子还不明显,看下面的例子
TRANSFER_HOLDSUM 持仓表,其中COMMODITYID字段为产品编码,TOTALASSET都持仓数量,现在需要统计COMMODITYID以3开头的各个产品的总数
方案一
SELECT
* from (SELECT COMMODITYID,SUM(TOTALASSET) FROM `TRANSFER_HOLDSUM` GROUP BY COMMODITYID ) as t
WHERE t.COMMODITYID like '3%'
方案二
SELECT COMMODITYID,SUM(TOTALASSET) FROM `TRANSFER_HOLDSUM` GROUP BY COMMODITYID HAVING COMMODITYID like '3%'