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;

取别名时的注意事项:在三种情况下,要在别名两侧加反引号

  1. 别名与SQL中的关键字相同。例: `where `
  2. 别名以数字开头。例: `2020年销售额 `
  3. 别名中包含特殊字符。例: `互联网+ `

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():统计行数;
  1. 参数为 *:统计选择范围内所有行(包括存在空值的行)的个数;
  2. 参数为 字段名:统计该字段中,所有 非空值 行的个数;
  3. 参数为 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;

执行顺序是:

  1. FROM 子句:从 orders 数据表中读取数据,确定后续查询的数据来源;
  2. GROUP BY 子句:根据 user_id 列的值进行分组;
  3. HAVING 子句:从分组结果中筛选出符合 R > 32 AND F <= 2 AND M < 1180 条件的分组;
  4. 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】排序与运算、筛选函数相关推荐

  1. sql 排序 分组 层级 筛选 - God聚会啊

    前言: 以前做过2种列表,1是有排序,有筛选功能,但是没有层级和分组,2是有树形结构的层级和分组,但是数据是一下全部加载出来,虽然有点落后,没有用到分页加载,但是也是受制于大环境. 今天有1个需求是  ...

  2. filter函数的用法_动态数组函数系列5| 筛选函数FILTER,单条件多条件动态筛选

    FILTER函数是筛选函数,就是在源数据中按照我们的条件筛选出我们想要的数据.除了常规的数据筛选,还可以进行多条件的"且"或者"或"的筛选. 下面我们来看看这个 ...

  3. python query.filter函数_filter筛选函数_【曾贤志】用Python处理Excel数据 - 第1季 基础篇_Excel视频-51CTO学院...

    ---------------------------------------------------------------- 学完本课程可继续巩固篇:https://edu.51cto.com/c ...

  4. DataTable排序,检索,合并,筛选

    http://apps.hi.baidu.com/share/detail/16252525 DataTable排序,检索,合并,筛选 DataTable排序,检索,合并详解 一.排序 1 获取Dat ...

  5. SQL Server中的STRING_SPLIT函数

    This article will cover the STRING_SPLIT function in SQL Server including an overview and detailed u ...

  6. sql用于字符串的聚合函数_SQL字符串函数用于数据整理(争用)

    sql用于字符串的聚合函数 In this article, you'll learn the tips for getting started using SQL string functions ...

  7. percent sql_使用SQL Server中的PERCENT_RANK函数计算SQL百分位数

    percent sql This article explores the SQL Server PERCENT_RANK analytical function to calculate SQL P ...

  8. SQL语句中的数学函数

    SQL语句中的数学函数 开发工具与关键技术:SQL Server 2014.SQL语句中的数学函数 作者:袁何恩 撰写时间:2019年7月16日 今天,我要和大家分享的技术是SQL语句中的数学函数. ...

  9. 【SQL开发实战技巧】系列(三):SQL排序的那些事

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  10. Sql分页查询以及top函数简单实例

    Sql分页查询以及top函数简单实例 Sql分页查询以及top函数简单实例 我们做项目时查询表格存在几百上千条数据时经常会需要用到分页,下面就给大家介绍一下在sql中查询分页的简单实例吧.首先我们要知 ...

最新文章

  1. 「珍藏」老司机为你推荐10个炫酷的开源库,看完的人都收藏了
  2. 你一定不能错过,Java视频全套
  3. STM32 电机教程 15 - BLDC 速度环内嵌电流环
  4. UI控件问题和XCode编译警告和错误解决方法集锦 (持续更新ing)
  5. [置顶]树莓派Android Things物联网开发:入门及资料汇总
  6. 初级Java开发面试必问项!!! 标识符、字面值、变量、数据类型,该学学了!
  7. [No000014A]Linux简介与shell编程
  8. base64位 解码图片
  9. Gradle与Makefile构建工具的对比
  10. System.SetString - 获取字符串
  11. iMX8MP方案推荐|一款适用于心电监护仪的嵌入式核心板
  12. AI Illustrator 中钢笔工具在绘制过程中如何使用
  13. 3.7V转3V超低功耗稳压芯片
  14. 前端开发之抽屉热搜榜
  15. 地图实时定位我的位置
  16. 蚂蚁电竞ANT27VQ评测
  17. 小程序源码:随机头像大全,多分类带历史记录-多玩法安装简单
  18. 最全的百度网盘搜索引擎
  19. 实时高分辨率视频抠像
  20. Cesium粒子系统-喷水效果

热门文章

  1. 2021-4-16美股交易第一课(暗盘)
  2. amd显卡linux命令,Linux用户的喜讯:A卡终支持显卡切换
  3. 【调试记录】syntax error near }
  4. JavaScript 【库】测试题
  5. 基于声网 Flat 实现“成语解谜”的 Web 小游戏
  6. 【GDOI2017第三轮模拟day2】魔法咒语(AC自动机,矩阵乘法)
  7. Unity制作《水果忍者》刀光特效
  8. python神经网络编程pdf_[人工智能]Python神经网络编程(高清,带详细书签) pdf文件[11.49MB]-码姐姐下载...
  9. 在主页面往回嵌套者其他页面
  10. 计算机网络张新有,张新有 - 西南交通大学 - 信息科学与技术学院