【SQL】排序与运算、筛选函数
1、字段间的算术运算
销量 = 备货量 - 库存量,那么,让备货量对应的字段
total
减去库存量对应的surplus
,结果是实际销量。SQL 会根据我们给出的算式,按行执行字段与字段之间的数学运算,最终的计算结果也被保存到了一个新的字段中,新字段的名称就是原算式total - surplus。
SELECT event_name,total,surplus,total - surplus FROM stocks;
2、round()函数--保留指定位数的小数
- round(待处理的算式/数据, 保留小数的位数)
- eg:round(surplus/total, 2)
SELECT event_name,total,surplus,round(surplus/total, 2) FROM stocks;
3、AS
关键字用
AS
关键字给字段取别名,这里的字段可以是数据表中的单独一列,也可以是算术运算后得到的新字段。--比如下面的语句,可以给 total - surplus 取别名为 sales,意为销量: SELECT event_name, price, total - surplus AS sales FROM stocks;--用中文作别名 SELECT event_name AS 演出名称,price AS 价格,total - surplus AS 销量 FROM stocks;
取别名时的注意事项:在三种情况下,要在别名两侧加反引号
- 别名与SQL中的关键字相同。例: `where `
- 别名以数字开头。例: `2020年销售额 `
- 别名中包含特殊字符。例: `互联网+ `
4、
ORDER BY 子句--按指定字段对查询结果进行排序。默认情况下,
ORDER BY
子句的结果为升序(从低到高)排列--按多个字段排序 --对 stocks 表按 演出类型 - 价格 排序的语句,写成: SELECT * FROM stocks ORDER BY event_type, price;
这里
event_type
作为外层排序依据,price
作为内层排序依据,SQL 会首先按event_type
,将同类型的数据组织到一起,再在每个类型内部按price
字段排序。SQL 对于中文会按照拼音排序,对于英文则是按照字母顺序排序的。
-- 按字段别名排序 -- 按英文别名排序 SELECT event_name,price,total - surplus AS sales FROM stocks ORDER BY sales;-- 按中文别名排序 SELECT event_name AS 演出名称,price AS 价格,total - surplus AS 销量 FROM stocks ORDER BY 销量;
指定排序方向
- 从低到高 ORDER BY price ASC (升序排序关键字可省略)
- 从高到低 ORDER BY price DESC (降序排序关键字)
5、LIMIT
关键字--限制查询结果的数量
LIMIT
关键字用于限制查询结果的数量,接收的两个参数分别为获取的起始位置(也即起始行号 - 1),和一共获取的行数,从起始位置开始,一直向后数指定个数字,也就得到了待获取的行号。
LIMIT 3, 4
的含义就是从 3 开始往后数 4 个数字,得到 4,5,6,7,以此作为待获取的行号。以
LIMIT 0, 5
为例,起始位置是 0,返回结果的行数是 5,那么,从 0 开始往后数 5 个数,就得到了待获取的行号:1, 2, 3, 4, 5,最终返回了第 1~5 行数据。
LIMIT 5
相当于LIMIT 0, 5
。-- 找到 话剧 类型的演出中 售卖比最高的 5 场 SELECT event_name AS 演出名称,price AS 价格,event_type AS 演出类型,(total - surplus) * price AS 销售额,round((total - surplus)/total, 2) AS 售卖比 FROM stocks WHERE 演出类型 = '话剧' ORDER BY 售卖比 DESC LIMIT 5;
6、datetime()函数
datetime(需要处理的日期字段, 原日期字段的格式)
eg:datetime(pay_time,' unixepoch')
把 pay_time 列从 Unix 时间戳格式日期,转换成标准格式的日期
7、substring()函数
substring (需要处理的字段, 开始提取位置, 提取字符个数)
eg:substring (tracking_num, 1, 2);--tracking_num 中前两个字母是我们需要提取出的快递公司编号信息,所以写成 SQL 语句就是这样: SELECT substring(tracking_num, 1, 2) AS 快递公司编码 FROM orders; --让计算机对于 tracking_num 字段中的每一行,都从第 1 个字符开始,提取出长度为 2 的字符串,也就是提取出前两个字母--判断提取出来的信息是否为 HX SELECT tracking_num AS 快递单号,substring(tracking_num, 1, 2) = 'HX' AS 是否为自营 FROM orders; --是否为自营 一列中的数据不是 0 就是 1 --SQLite 默认使用 0 来表示 假、不成立 的概念,用 1 来表示 真、成立 的概念
8、iif()函数
iif( 需要判断的条件, 满足条件时在结果对应行填入的值, 不满足条件时在结果对应行填入的值)
eg:iif( substring (tracking_num, 1, 2) = ‘HX', '是', '否')
SELECT tracking_num AS 快递单号,iif(substring(tracking_num, 1, 2) = 'HX', -- 需要判断的条件'是', -- 满足条件时填入的值'否' -- 不满足条件时填入的值) AS 是否为自营 FROM orders;
跟统计相关的函数:
count()
:统计行数;
- 参数为
*
:统计选择范围内所有行(包括存在空值的行)的个数;- 参数为 字段名:统计该字段中,所有 非空值 行的个数;
- 参数为 DISTINCT 字段名:统计该字段中,唯一 非空值 行的个数。
min()
:统计最小值;max()
:统计最大值;avg()
:统计平均值;sum()
:统计所有数值之和。-- 在 SQLite 中,整数与整数作除法时,会舍去小数点后的数值 -- 所以两个计算字段,都需要在前面乘以 1.0,写成形如 1.0 * 计算公式 的形式,避免损失精度 SELECT round(1.0*(sum(price*amount))/count(DISTINCT user_id), 2)AS 平均消费金额,round(1.0*(sum(amount))/count(DISTINCT user_id), 2)AS 平均购买门票张数 FROM orders;
9、GROUP BY
子句--将原数据进行 分组GROUP BY 分组依据;
eg:GROUP BY user_id;
SQL 会先执行
GROUP BY
子句,再执行SELECT
子句。
10、HAVING
子句--筛选分组结果HAVING 筛选依据;
-- 筛选出所有新用户啦 -- 同时满足 R 高(R > 32)、F 不高于2(F <= 2)、M 低(M < 1180)这三个条件的用户才是新用户 -- 并按照 M 降序、F 降序、R 升序 的顺序,对结果进行排序 SELECT user_id AS 用户ID,user_name AS 用户昵称,(1641052799 - max(pay_time)) / (24 * 60 * 60) AS R,count(user_id) AS F,sum(price * amount) AS M FROM orders GROUP BY user_id HAVING R > 32AND F <= 2AND M < 1180 ORDER BY M DESC, F DESC, R;
执行顺序是:
FROM
子句:从orders
数据表中读取数据,确定后续查询的数据来源;GROUP BY
子句:根据user_id
列的值进行分组;HAVING
子句:从分组结果中筛选出符合R > 32 AND F <= 2 AND M < 1180
条件的分组;SELECT
子句:从最终结果中选择出若干列、计算字段进行展示。
子查询:用一对圆括号()
包裹,作为一个元素参与到外层查询中的查询。
-- 从此处开始写外层查询
SELECT item_id, item_name
FROM items
WHERE item_id IN-- 用圆括号将子查询内容包裹起来(SELECT item_idFROM user_behaviorWHERE type = 'buy' -- 筛选出类型为 buy 的数据GROUP BY item_id -- 按 item_id 进行分组ORDER BY count(*) DESC -- 按每组数据的数量进行降序排序LIMIT 1 -- 选取出第一条数据,也就是购买人数最多的商品);
-- 外层查询编写完毕,别忘了加上分号哦
把子查询作为外层查询的计算字段:
-- 根据 items 数据表中记录的 brand_id 信息,检索出 brands 数据表中对应的 brand_name
-- 并作为一个计算字段,展示在最终的结果表里
SELECT (SELECT brand_nameFROM brandsWHERE brands.brand_id = items.brand_id) AS 品牌名,item_name AS 商品名
FROM items;
SELECT count(iif(type = 'pv', 1, NULL)) AS A,count(iif(type IN ('fav', 'cart'), 1, NULL)) AS I,count(iif(type = 'buy', 1, NULL)) AS P,(SELECT count(*)FROM (SELECT count(*) AS 购物次数FROM user_behaviorWHERE type = 'buy'GROUP BY user_idHAVING 购物次数 > 1)) AS L
FROM user_behavior;
AS关键字给表取别名
SELECT datetime(ub.time, 'unixepoch') AS 购买时间,ub.user_name AS 用户名,i.item_name AS 商品名,b.brand_name AS 品牌名
FROM user_behavior AS ub,items AS i,brands AS b
WHERE ub.item_id = i.item_idAND i.brand_id = b.brand_idAND ub.type = 'buy';
JOIN
--把两张数据表 联结 起来
SELECT datetime(time, 'unixepoch') 购买时间,user_name 用户名,item_name 商品名,brand_name 品牌名
FROM user_behavior ubJOIN items i ON ub.item_id = i.item_idJOIN brands b ON i.brand_id = b.brand_id
WHERE type = 'buy';
LEFT JOIN
把 LEFT JOIN
关键字之前的数据表作为主表,把后面的作为次表。在创建联结时,先把主表中的所有数据誊抄一遍,再把次表中符合联结条件的数据拼接在后面。可以完全保留主表中的数据。
SELECT *
FROM items iLEFT JOIN item_data id ON i.item_id = id.item_idJOIN brands b ON i.brand_id = b.brand_id;
【SQL】排序与运算、筛选函数相关推荐
- sql 排序 分组 层级 筛选 - God聚会啊
前言: 以前做过2种列表,1是有排序,有筛选功能,但是没有层级和分组,2是有树形结构的层级和分组,但是数据是一下全部加载出来,虽然有点落后,没有用到分页加载,但是也是受制于大环境. 今天有1个需求是 ...
- filter函数的用法_动态数组函数系列5| 筛选函数FILTER,单条件多条件动态筛选
FILTER函数是筛选函数,就是在源数据中按照我们的条件筛选出我们想要的数据.除了常规的数据筛选,还可以进行多条件的"且"或者"或"的筛选. 下面我们来看看这个 ...
- python query.filter函数_filter筛选函数_【曾贤志】用Python处理Excel数据 - 第1季 基础篇_Excel视频-51CTO学院...
---------------------------------------------------------------- 学完本课程可继续巩固篇:https://edu.51cto.com/c ...
- DataTable排序,检索,合并,筛选
http://apps.hi.baidu.com/share/detail/16252525 DataTable排序,检索,合并,筛选 DataTable排序,检索,合并详解 一.排序 1 获取Dat ...
- SQL Server中的STRING_SPLIT函数
This article will cover the STRING_SPLIT function in SQL Server including an overview and detailed u ...
- sql用于字符串的聚合函数_SQL字符串函数用于数据整理(争用)
sql用于字符串的聚合函数 In this article, you'll learn the tips for getting started using SQL string functions ...
- percent sql_使用SQL Server中的PERCENT_RANK函数计算SQL百分位数
percent sql This article explores the SQL Server PERCENT_RANK analytical function to calculate SQL P ...
- SQL语句中的数学函数
SQL语句中的数学函数 开发工具与关键技术:SQL Server 2014.SQL语句中的数学函数 作者:袁何恩 撰写时间:2019年7月16日 今天,我要和大家分享的技术是SQL语句中的数学函数. ...
- 【SQL开发实战技巧】系列(三):SQL排序的那些事
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- Sql分页查询以及top函数简单实例
Sql分页查询以及top函数简单实例 Sql分页查询以及top函数简单实例 我们做项目时查询表格存在几百上千条数据时经常会需要用到分页,下面就给大家介绍一下在sql中查询分页的简单实例吧.首先我们要知 ...
最新文章
- 「珍藏」老司机为你推荐10个炫酷的开源库,看完的人都收藏了
- 你一定不能错过,Java视频全套
- STM32 电机教程 15 - BLDC 速度环内嵌电流环
- UI控件问题和XCode编译警告和错误解决方法集锦 (持续更新ing)
- [置顶]树莓派Android Things物联网开发:入门及资料汇总
- 初级Java开发面试必问项!!! 标识符、字面值、变量、数据类型,该学学了!
- [No000014A]Linux简介与shell编程
- base64位 解码图片
- Gradle与Makefile构建工具的对比
- System.SetString - 获取字符串
- iMX8MP方案推荐|一款适用于心电监护仪的嵌入式核心板
- AI Illustrator 中钢笔工具在绘制过程中如何使用
- 3.7V转3V超低功耗稳压芯片
- 前端开发之抽屉热搜榜
- 地图实时定位我的位置
- 蚂蚁电竞ANT27VQ评测
- 小程序源码:随机头像大全,多分类带历史记录-多玩法安装简单
- 最全的百度网盘搜索引擎
- 实时高分辨率视频抠像
- Cesium粒子系统-喷水效果
热门文章
- 2021-4-16美股交易第一课(暗盘)
- amd显卡linux命令,Linux用户的喜讯:A卡终支持显卡切换
- 【调试记录】syntax error near }
- JavaScript 【库】测试题
- 基于声网 Flat 实现“成语解谜”的 Web 小游戏
- 【GDOI2017第三轮模拟day2】魔法咒语(AC自动机,矩阵乘法)
- Unity制作《水果忍者》刀光特效
- python神经网络编程pdf_[人工智能]Python神经网络编程(高清,带详细书签) pdf文件[11.49MB]-码姐姐下载...
- 在主页面往回嵌套者其他页面
- 计算机网络张新有,张新有 - 西南交通大学 - 信息科学与技术学院