两小段代码彻底学会having子句和where子句
两者都用于过滤
过滤 = 从所有的里面筛选出符合条件的那些
where过滤 = 从所有的记录里面筛选出符合条件的那些记录
having过滤 = 从所有的组里面筛选出符合条件的那些组
只返回订单表中订单数量超过2个的每一个顾客的订单数量
1 返回订单表中每一位顾客的订单数量
SELECT cust_id,COUNT(*) AS num_orders
FROM Products
GROUP BY cust_id;
2 筛选出订单数量超过两个的那些顾客
HAVING COUNT(*) > 2;
先按顾客将所有记录进行分组
然后再统计出每组的记录总数
最后筛选出记录总数超过2的那些小组
最终显示出那些小组及那些小组的记录总数
3 SELECT cust_id,COUNT(*) AS num_orders
FROM Products
GROUP BY cust_id
HAVING COUNT(*) > 2;
返回产品表中每一供应商的产品中价格高于4的且总量超过2的产品的总量
有点复杂
返回产品表中每一供应商的产品总量超过2的产品的总量
还有点复杂
返回产品表中每一供应商的产品总量
这个好弄:
SELECT vend_id,COUNT(*) AS num_items
FROM Products
GROUP BY vend_id;
变简单了:
返回产品表中每一供应商的产品总量超过2的产品的总量
于是:
SELECT vend_id,COUNT(*) AS num_items
FROM Products
GROUP BY vend_id
HAVING COUNT(*) > 2
变简单了
返回产品表中每一供应商的产品中价格高于4的且总量超过2的产品的总量
于是
SELECT vend_id,COUNT(*) AS num_items
FROM Products
WHERE prod_price > 4
GROUP BY vend_id
HAVING COUNT(*) > 2
思路:先过滤行再过滤组
先过滤出价格高于4的所有记录
然后在这些记录中按生产商进行分组
再之后统计出每组的记录总数
最后筛选出记录总数超过2的那些组
最终显示那些组合那些组中的记录总数