两小段代码彻底学会having子句和where子句

两小段代码彻底学会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的那些组
最终显示那些组合那些组中的记录总数


 

猜你喜欢

转载自blog.csdn.net/weixin_42204641/article/details/81237559