MySQL SQL函数

SQL查询排序:递减desc、递增ASC

mysql> select * from test_table order by id DESC;  -- 根据id进行递减

===================================================
MySQL 数值函数
1、CEILING(num) - 返回最小的整数,使这个整数大于或等于指定数的数值运算(向上取整)。
2、FLOOR(num) - 返回最大整数,使这个整数小于或等于指定数的数值运算(向下取整)。
3、ROUND(num) - 四舍五入一个正数或者负数,结果为一定长度的值(四舍五入)。

===================================================
MySQL 填充字符 函数
1、Lpad(str,len,padstr)函数,-LPAD(要查询的字段,长度,用来填充的字符),左填充
2、Rpad(str,len,padstr)函数,-右填充

===================================================
MySQL中CONCAT()、CONCAT_WS()和GROUP_CONCAT()函数的区别和使用:
1、CONCAT(str1,str2,…) - 将多个字符串连接成一个字符串,例:

mysql>select CONCAT('张三','到黄山','旅游')
result> 张三到黄山旅游

2、CONCAT_WS(separator,str1,str2,...) - 将多个字符串通过separator(分隔符)连接成一个新字符串。

mysql>select CONCAT_WS('-','张三','到黄山',NULL,'旅游') --NULL不会被连接
result> 张三-到黄山-旅游

3、GROUP_CONCAT( [distinct] 要连接的字段名 [order by 排序字段 asc/desc ] [separator '分隔符'] ) - 将一个字段下的所有字符通过分隔符连接成新的字符串(分隔符默认为逗号)

mysql>select group_concat(price) from emp; --默认以(英文的)逗号分隔
--或
mysql>select id,group_concat(DISTINCT price ORDER BY price DESC) from goods GRROUP BY id;

4、一个有用的小方法:时间转换(毫秒转换为时分秒格式)

-- time_table(id, duration) duration为一个毫秒数值

select
  CONCAT(
          LPAD(FLOOR((SUM(duration)/1000) / 3600), 2, '0'), ':',
          LPAD(FLOOR(((SUM(duration)/1000) % 3600) / 60), 2, '0'), ':',
          LPAD((SUM(duration)/1000) % 60, 2, '0')
        ) AS TIME -- duration为毫秒,转换成时分秒格式
FROM time_table

===================================================
MySQL 时间处理
1、DATE_FORMAT(date_time, 'yyyy-MM-dd') 将时间date_time转换为'yyyy-MM-dd'格式
2、from_unixtime(unix_timestamp(), "yyyy-MM-dd HH:mm:ss") 获取当前时间

===================================================
coalesce()函数
1、COALESCE(value1,value2,...);

--例如表:test_table(id, ant, bnt, other)
mysql>select coalesce(ant, bnt, 1) from test_table where id=1; -- 获取[ant,bnt,1]里第一个不为 NULL 的 参数值

===================================================
MySQL 语法句子 case when then end
1、

case when 条件 then 满足条件的值 end  -- 没有else的话,默认为 else Null

2、

case when 条件 then 满足条件的值 else 不满足条件的值 end

3、

case 参数 
when 参数条件 then 满足条件的值  
when 参数条件 then 满足条件的值
else 不满足条件的值 end

-- case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略
select
  case sex
  when '1' then '男'
  when '2' then '女'
  else '其他' end
from user

===================================================
MySQL 窗口函数

1、ROW_NUMBER() - 从1开始,依次递增,为每条分组记录返回一个数字。

mysql>select ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2) as row_num from test_table;
-- 根据COLUMN1进行分组,按COLUMN2进行排序(默认递增),每一组 通过ROW_NUMBER()生成一个序号数值,依次递增。

2、RANK() 按排序字段为每一组的行生成一个序号,与ROW_NUMBER()不同的是如果按照ORDER BY的排序,如果有相同的值会生成相同的序号。

mysql>select RANK() OVER(PARTITION BY COLUMN1 ORDER BY COLUMN2) from test_table;
-- 根据COLUMN1进行分组,按COLUMN2进行排序(默认递增),每一组 通过RANK()生成一个序号数值,若相同组内COLUMN2值相同,则生成的序号相同。

3、PARTITION BY 主要应用在OVER(PARTITION BY COLUMN1) 语句中,表示对COLUMN1进行分组(类似于group by)

========================================

SQL中的取整函数FLOORROUNDCEILTRUNCSIGN

1 trunc(value,precision)按精度(precision)截取某个数字,不进行舍入操作。
2 round(value,precision)根据给定的精度(precision)输入数值。
3 ceil (value) 产生大于或等于指定值(value)的最小整数。
4 floor(value)与 ceil()相反,产生小于或等于指定值(value)的最小整数。
5 sign(value) 与绝对值函数ABS()相反。ABS()给出的是值的量而不是其符号,sign(value)则给出值的符号而不是量。

RAND() 函数用于显示位于0和1之间的随机值,但并不返回确切的1 (返回一随机数值的范围在0至RAND_MAX 间)

SELECT RAND();  -- 随机生成一个[0, 1) 之间的数
SELECT RAND()*(10-5)+5 AS num;  -- 随机生成一个[5, 10) 之间的数
SELECT FLOOR(RAND()*(10-5+1)+5) AS num; -- 随机生成一个[5, 10] 之间的数

SELECT * FROM products ORDER BY RAND() LIMIT 10; -- 从products表中随机获取10条数据(随机获取10个product)

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

mysql> SELECT ROUND(1.298, 1);  -- 1.3
mysql> SELECT ROUND(1.298, 0);  -- 1
SELECT ROUND(RAND() * (SELECT MAX(id) FROM `theme_reco`.`hot_content`)) AS id  # 随机生成 [0, max_id) 之间的随机整数

====================

posted @ 2024-08-06 10:53  二月雪  阅读(18)  评论(0编辑  收藏  举报