SQL高级学习(九)

SQL GROUP BY 语句


GROUP BY 语句可结合一些聚合函数来使用


GROUP BY 语句

GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

SQL GROUP BY 语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

统计 access_log 各个 site_id 的访问量:

SELECT site_id, SUM(access_log.count) AS nums

FROM access_log GROUP BY site_id;

SQL GROUP BY 多表连接

现在我们想要查找每个送货员配送的订单数目。

下面的 SQL 语句统计所有网站的访问的记录数:

SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id

GROUP BY Websites.name;

SQL HAVING 子句


HAVING 子句

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。

HAVING 子句可以让我们筛选分组后的各组数据。

SQL HAVING 语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

现在我们想要查找总访问量大于 200 的网站。

我们使用下面的 SQL 语句:

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log
INNER JOIN Websites
ON access_log.site_id=Websites.id)
GROUP BY Websites.name

HAVING SUM(access_log.count) > 200;

现在我们想要查找总访问量大于 200 的网站,并且 alexa 排名小于 200。

我们在 SQL 语句中增加一个普通的 WHERE 子句:

SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200 
GROUP BY Websites.name

HAVING SUM(access_log.count) > 200;

SQL UCASE() 函数


UCASE() 函数

UCASE() 函数把字段的值转换为大写。

SQL UCASE() 语法

SELECT UCASE(column_name) FROM table_name;

用于 SQL Server 的语法

SELECT UPPER(column_name) FROM table_name;

下面的 SQL 语句从 "Websites" 表中选取 "name" 和 "url" 列,并把 "name" 列的值转换为大写:

SELECT UCASE(name) AS site_title, url

FROM Websites;

SQL LCASE() 函数


LCASE() 函数

LCASE() 函数把字段的值转换为小写。

SQL LCASE() 语法

SELECT LCASE(column_name) FROM table_name;

用于 SQL Server 的语法

SELECT LOWER(column_name) FROM table_name;

下面的 SQL 语句从 "Websites" 表中选取 "name" 和 "url" 列,并把 "name" 列的值转换为小写:

SELECT LCASE(name) AS site_title, url

FROM Websites;

MID() 函数

MID() 函数用于从文本字段中提取字符。

SQL MID() 语法

SELECT MID(column_name,start[,length]) FROM table_name;

参数描述
column_name必需。要提取字符的字段。
start必需。规定开始位置(起始值是 1)。
length可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。

下面的 SQL 语句从 "Websites" 表的 "name" 列中提取前 4 个字符:

SELECT MID(name,1,4) AS ShortTitle

FROM Websites;

LEN() 函数

LEN() 函数返回文本字段中值的长度。

SQL LEN() 语法

SELECT LEN(column_name) FROM table_name;

MySQL 中函数为 LENGTH():

SELECT LENGTH(column_name) FROM table_name;

下面的 SQL 语句从 "Websites" 表中选取 "name" 和 "url" 列中值的长度:

SELECT name, LENGTH(url) as LengthOfURL

FROM Websites;

SQL ROUND() 函数


ROUND() 函数

ROUND() 函数用于把数值字段舍入为指定的小数位数。

SQL ROUND() 语法

SELECT ROUND(column_name,decimals) FROM table_name;

参数描述
column_name必需。要舍入的字段。
decimals必需。规定要返回的小数位数。

SQL ROUND() 实例

ROUND(X): 返回参数X的四舍五入的一个整数。

mysql> select ROUND(-1.23);
        -> -1
mysql> select ROUND(-1.58);
        -> -2
mysql> select ROUND(1.58);
        -> 2

ROUND(X,D): 返回参数X的四舍五入的有 D 位小数的一个数字。如果D为0,结果将没有小数点或小数部分。

mysql> select ROUND(1.298, 1);
        -> 1.3
mysql> select ROUND(1.298, 0);
        -> 1

注意:ROUND 返回值被变换为一个BIGINT!

SQL NOW() 函数


NOW() 函数

NOW() 函数返回当前系统的日期和时间。

SQL NOW() 语法

SELECT NOW() FROM table_name;

下面的 SQL 语句从 "Websites" 表中选取 name,url,及当天日期:

SELECT name, url, Now() AS date

FROM Websites;

SQL FORMAT() 函数


FORMAT() 函数

FORMAT() 函数用于对字段的显示进行格式化。

SQL FORMAT() 语法

SELECT FORMAT(column_name,format) FROM table_name;

参数描述
column_name必需。要格式化的字段。
format必需。规定格式。

下面的 SQL 语句从 "Websites" 表中选取 name, url 以及格式化为 YYYY-MM-DD 的日期:

SELECT name, url, DATE_FORMAT(Now(),'%Y-%m-%d') AS date
FROM Websites;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值