mysql的select函数_【MySQL笔记】3 MySQL函数与SELECT的更多功能

MySQL笔记基于教材,笔记中用到的数据库可以点击该链接下载

常用的文本处理函数

ed5553892779

ed5553892779

SOUNDEX值相等意味着字符串的发音相同。

常用日期和时间处理函数

ed5553892779

常用的数值处理函数

ed5553892779

聚集函数

聚集函数处理一组数据,汇总后返回单个值。

ed5553892779

AVG()函数只处理作为参数的单个列,且忽略NULL

不指定列的COUNT(*)对所有行计数,不管各行有什么值;而指定列COUNT(column)对特定行技术,忽略NULL

MySQL5.0.3后的版本支持对数值处理函数加上ALL或DISTINCT限定,默认为ALL。如果限定为DISTINCT,则只处理不重复的值

使用SELECT的GROUP BY子句分组数据

GROUP BY子句允许对数据汇总前按照逻辑分组

下面的例子按照vend_id分组后对每组计算行数。

mysql> SELECT vend_id, COUNT(*) AS num_prods

-> FROM products

-> GROUP BY vend_id;

+---------+-----------+

| vend_id | num_prods |

+---------+-----------+

| 1001 | 3 |

| 1002 | 2 |

| 1003 | 7 |

| 1005 | 2 |

+---------+-----------+

4 rows in set (0.01 sec)

以下是GROUP BY的一些规定:

ed5553892779

使用SELECT的HAVING子句过滤分组

对分组筛选前

mysql> SELECT cust_id, COUNT(*) AS orders

-> FROM orders

-> GROUP BY cust_id;

+---------+--------+

| cust_id | orders |

+---------+--------+

| 10001 | 2 |

| 10003 | 1 |

| 10004 | 1 |

| 10005 | 1 |

+---------+--------+

4 rows in set (0.00 sec)

对分组筛选后

mysql> SELECT cust_id, COUNT(*) AS orders

-> FROM orders

-> GROUP BY cust_id

-> HAVING COUNT(*) >= 2;

+---------+--------+

| cust_id | orders |

+---------+--------+

| 10001 | 2 |

+---------+--------+

1 row in set (0.00 sec)

HAVING与WHERE在于WHERE运行在分组前对行筛选,而HAVING运行在分组后对分组筛选。在写法上,WHERE需要写在GROUP BY前,而HAVING需要写在GROUP BY后。

下面的例子筛选出了具有2个(含)以上、价格为10(含)以上的产品的供应商

mysql> SELECT vend_id, COUNT(*) AS num_prods

-> FROM products

-> WHERE prod_price >= 10

-> GROUP BY vend_id

-> HAVING COUNT(*) >= 2;

+---------+-----------+

| vend_id | num_prods |

+---------+-----------+

| 1003 | 4 |

| 1005 | 2 |

+---------+-----------+

2 rows in set (0.01 sec)

在使用GROUP BY时不要忘记使用ORDER BY对数据排序

以下是GROUP BY和ORDER BY的区别

ed5553892779

用例子说明它们的区别

mysql> SELECT order_num, SUM(quantity*item_price) AS ordertotal

-> FROM orderitems

-> GROUP BY order_num

-> HAVING SUM(quantity*item_price) >= 50;

+-----------+------------+

| order_num | ordertotal |

+-----------+------------+

| 20005 | 149.87 |

| 20006 | 55.00 |

| 20007 | 1000.00 |

| 20008 | 125.00 |

+-----------+------------+

4 rows in set (0.00 sec)

使用ORDER BY按总计订单额排序

mysql> SELECT order_num, SUM(quantity*item_price) AS ordertotal

-> FROM orderitems

-> GROUP BY order_num

-> HAVING SUM(quantity*item_price) >= 50

-> ORDER BY ordertotal;

+-----------+------------+

| order_num | ordertotal |

+-----------+------------+

| 20006 | 55.00 |

| 20008 | 125.00 |

| 20005 | 149.87 |

| 20007 | 1000.00 |

+-----------+------------+

4 rows in set (0.00 sec)

SELECT子句顺序回顾

ed5553892779

ed5553892779

MySQL系列笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值