sqlite3之select语句的子句:group,having, order
文章目录
- select 子句
- group by
- having
- order by
- 输出行数筛选
- 常用函数
sqlite3初步
select 子句
select语句的基本格式自然是select * from,定制化查询需要在后面加一个where,但查询之后可能还要对查询结果进行处理,所以select语句并不算完,其完整结构如下
SELECT [DISTINCT] select_heading
FROM source_tables
WHERE filter_expression
GROUP BY grouping_expressions
HAVING filter_expression
ORDER BY ordering_expressions
LIMIT count
OFFSET count
除了where之外,其他子句含义如下
命令 | 说明 |
---|---|
group by | 对数据分组 |
having | 过滤分组结果 |
order by | 对查询结果排序 |
limit | 限制提取行数 |
offset | 提取偏移量,即跳过开头的行数 |
group by
group by可以执行分组操作,以前20名国家GDP数据为例,若想得到每个大洲的GDP数据,那么就可以通过group by子句实现,示例如下
select continent, sum(gdp) from gdp group by continent;
返回结果如下
continent sum(gdp)
--------- ---------
亚洲 296800.0
大洋洲 16800.0
欧洲 182748.09
美洲 309300.0
having
从语法格式来说,group by在where后面,也就是说group是在where语句结束之后才执行的。换言之,在执行group by语句之后没法再通过where来筛选,所以额外需要一个筛选指令,此即having。
仍以各大洲GDP为例,如果想获取GDP大于10万亿的大洲,那么
select continent, sum(gdp) from gdp group by continent having sum(gdp)>100000;
返回结果如下,的确是把大洋洲过滤掉了。
continent sum(gdp)
--------- ---------
亚洲 296800.0
欧洲 182748.09
美洲 309300.0
order by
order by指令可用于排序, 比如想让输出按照gdp升序排序,那么在上一条语句后面再加上order by sum(gdp) asc
select continent, sum(gdp) from gdp group by continent having sum(gdp)>100000 order by sum(gdp) asc;
其中asc表示升序,如果替换为desc则是降序。升序的返回结果如下
continent sum(gdp)
--------- ---------
欧洲 182748.09
亚洲 296800.0
美洲 309300.0
输出行数筛选
通过limit和offset关键字,可以指定输出行数和输出行的位置,由于上一条指令太长了,所以下面新开一条语句,总之记住这两个子句放在最后就对了
select * from gdp order by gdp desc limit 5 offset 3;
表示根据gdp降序排序,跳过最前面的3条,然后选择5条,查询结果如下
rank nation continent gdp ratio
---- ------ --------- ------- --------
4 德国 欧洲 40700.0 0.040494
5 印度 亚洲 33900.0 0.033662
6 英国 欧洲 30700.0 0.030535
7 法国 欧洲 27800.0 0.027674
8 俄罗斯 欧洲 22400.0 0.022279
常用函数
在group by语句中用到了函数sum用于求和,sqlite3中提供了诸如sum的一些常用函数
函数 | 功能 | 函数 | 功能 |
---|---|---|---|
count | 计数 | ||
max | 最大值 | min | 最小值 |
sum | 求和 | avg | 平均值 |
random | 随机整数 | ||
abs | 绝对值 | ||
upper | 转大写 | lower | 转小写 |
length | 字符串长度 |