当前位置:   article > 正文

sql having是什么意思_SQL-计算、汇总和分组

sql having 加减

SQL必知必会-读书笔记(10-13章)

十、创建计算字段

字段(field ):与列的意思相同,经常可以互换。

1.拼接:

concat()需要1个或多个制定的串,各个串之间用逗号分隔。

拼接后命名:AS

  1. SELECT Concat(Rtrim(vend_name),'(',Rtrim(vend_country),')') AS
  2. vend_title
  3. FROM vendors
  4. ORDER BY vend_name;

***Rtrim()去掉右边空格,Ltrim()去掉左边空格,Trim去掉离两边空格

2.算术计算

支持使用的操作符:+ - * / (加减乘除)

  1. SELECT prod_id,quantity,item_price,quantity*item_price AS enpanded_price
  2. FROM orderitems
  3. WHERE order_num=20005;

十一、使用数据处理函数

**不同DBMS支持的函数差异很大

**多数SQL支持处理:文本(删除或增加填充值,大小写转换),算术计算(返回绝对值,代数运算),时间函数(返回日期之差),返回DBMS正在使用的特殊信息(返回用户登录信息,检查版本细节等)。

1.文本处理函数

fec74333396362037b7f20ce05389c68.png
常用文本处理函数

Soundex()函数,能够匹配虽有发音类似的词

  1. SELECT cust_name,cust_contact
  2. FROM custormers
  3. WHERE Soundex(cust_contact)=Soundex('Y Lie');

2.日期和时间处理函数

c8b11aaf330deb514b32811768917e45.png
常用日期和时间处理函数
  1. SELECT cust_id,order_num
  2. From orders
  3. WHERE Date(order_date) BETWEEN '2005-09-01' AND '2005-09-30';
  4. SELECT cust_id,order_num
  5. From orders
  6. WHERE Year(order_date)=2005 AND Month(order_date)=9;

3.数值处理函数

一般用于代数、三角函数、几何运算,使用并不频繁

ff162b7d2b324a71ee99d238247268b7.png

十二、汇总数据

1.聚集函数

ba60a0b5a86df884ac0dc5910423b4b7.png
  1. SELECT AVG(prod_price) AS avg_price
  2. FROM products;

AVG()只能用于单列

COUNT(*)对所有列进行计数

COUNT(column)对特定列进行计数,忽略NULL值

MAX(column) MIN(column) ,忽略NULL值

SUM() 括号内支持进行算术计算

  1. SELECT SUM(item_price*quantity) AS total_price
  2. FROM orderitems
  3. WHERE order_num =20005;

2.聚集不同值

DISTINCT参数,使用后只计算那些取值不同的聚集值

  1. SELECT AVG(DISTINCT prod_price) AS avg_price
  2. FROM product
  3. WHERE vend_id=1003;

3.组合聚集函数

即在一个SELECT语句中可以同时使用多种聚集函数

  1. SELECT COUNT(*) AS num_items,
  2. MIN(prod_price) AS price_min,
  3. MAX(prod_price) AS price_max,
  4. AVG(prod_price) AS price_avg
  5. FROM products;

十三、分组数据

1.创建分组【GROUP BY】

  1. SELECT vend_id,COUNT(*) AS num_prod
  2. FROM products
  3. GROUP BY vend_id;

#如果在SELECT中使用表达式,必须在GROUP BY子句中使用相同的表达式。不能用别名

#除聚集计算语句外,SELECT语句中的而每个列都必须在GROUP BY 子句中给出

#如果分组列中有NULL值,则NULL将作为一个分组返回。

#GROUP BY子句必须在WHERE之后,ORDER BY 子句之前。

2.过滤分组【HAVING】

  1. SELECT cust_id, COUNT(*) AS orders
  2. FROM orders
  3. GROUP BY cust_id
  4. HAVING COUNT(*)>=2;

#HAVING 和 WHERE的区别:

1.HAVING在分组后,WHERE分组前

2.HAVING过滤分组,WHERE过滤行

3.分组和排序

64252bc414302e009fcdd2015ba44838.png
  1. SELECT order_num, SUM(quantity*item_price) AS ordertotal
  2. FROM orderitems
  3. GROUP BY order_num
  4. HAVING SUM(quantity*item_price)>=50
  5. ORDER BY ordertotal;

4.SELECT子句顺序

9f3bfaf3f6567ce06ac71d7e2188262e.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/470860
推荐阅读
相关标签
  

闽ICP备14008679号