SQL常用函数

1. COALESCE()函数

COALESCE()函数是一种在SQL中常用的函数,用于返回参数列表中的第一个非空值。它接受多个参数,并按照参数的顺序逐个评估,返回第一个非空值。如果所有参数都为空,则返回NULL。 COALESCE()函数的语法如下:

COALESCE(value1, value2, ..., valuen)

其中,value1, value2, …, valuen是要评估的参数列表。 COALESCE()函数的工作原理如下:

  1. 从左到右逐个评估参数。

  2. 如果当前参数的值不为空(非NULL),则返回该值。

  3. 如果当前参数的值为空(NULL),则继续评估下一个参数

  4. 如果所有参数都为空(NULL),则返回NULL。

    COALESCE()函数通常用于处理空值情况,例如在查询中选择非空字段、提供默认值等。它提供了一种简洁的方式来处理多个可能为空的值,并返回第一个非空值。

2. CHAR_LENGTH(str) 和 LENGTH(str)

CHAR_LENGTH(str) 和 LENGTH(str) 函数都用于计算字符串的长度,但在某些情况下它们可能会有所不同。

CHAR_LENGTH(str)

CHAR_LENGTH(str)函数返回字符串中的字符数,而不考虑字符是否占据多个字节。这意味着对于包含 多字节字符(例如 Unicode 字符)的字符串,每个字符都会被计算为一个字符。例如,对于字符串 “你好世界”,CHAR_LENGTH 函数将返回 5,因为它包含了 5个字符。

LENGTH(str)

LENGTH(str)
函数返回字符串的字节数。它计算字符串中的每个字符所占的字节数,并将它们相加。对于包含多字节字符的字符串,每个字符都会根据其占用的字节数进行计算。例如,对于字符串 “你好世界”,LENGTH 函数将返回 15,因为它包含了 15 个字节。

因此,在处理多字节字符时,CHAR_LENGTH 和 LENGTH 函数的结果可能会有所不同。根据你的需求,选择适合的函数来计算字符串的长度。

--推文字符严格大于 15 
select tweet_id from Tweets where char_length(content) > 15

3. datediff(日期1, 日期2)

datediff(日期1, 日期2): 得到的结果是日期1与日期2相差的天数。 如果日期1比日期2大,结果为正;如果日期1比日期2小,结果为负。

4. ROUND函数

在 SQL 中,ROUND() 函数用于将一个数值四舍五入为指定的小数位数或精度。它的语法如下:
ROUND(number, decimals)
其中, number 是要进行四舍五入的数值, decimals 是指定的小数位数或精度。

以下是 ROUND() 函数的一些示例用法:

  1. 四舍五入到整数:
    SELECT ROUND(3.7); – 结果为 4
  2. 四舍五入到指定的小数位数:
    SELECT ROUND(3.14159, 2); – 结果为 3.14
  3. 四舍五入到负数位数(十位、百位等):
    SELECT ROUND(12345, -2); – 结果为 12300
    需要注意的是,ROUND() 函数遵循常规的四舍五入规则。如果小数部分大于等于 0.5,则向上舍入;如果小数部分小于 0.5,则向下舍入。

另外,不同的数据库管理系统可能在 ROUND() 函数的行为和语法上略有差异,请根据具体的数据库系统文档进行参考。

5. AVG函数

SQL的AVG函数用于计算某一列的平均值。它可以应用于数值类型的列,例如整数、小数或浮点数。

AVG函数的语法如下:

SELECT AVG(column_name) FROM table_name;

其中,column_name是您想要计算平均值的列名,table_name是包含该列的表名。

以下是一个示例,计算"sales"表中"price"列的平均值:

SELECT AVG(price) FROM sales;

执行该查询后,将返回"price"列的平均值作为结果。

请注意,AVG函数会自动忽略列中的NULL值。如果您想要排除NULL值并计算非NULL值的平均值,可以使用以下语法:

SELECT AVG(column_name) FROM table_name WHERE column_name IS NOT NULL;

这样将只计算非NULL值的平均值。

带条件的AVG函数使用

SELECT
    s.user_id,
    ROUND(IFNULL(AVG(c.action = 'confirmed'),0), 2) AS confirmation_rate
FROM
    signups s
LEFT JOIN
    confirmations c ON s.user_id = c.user_id
GROUP BY
    s.user_id;
--等价于
SELECT
    s.user_id,
    ROUND(COUNT(IF(c.action = 'confirmed', 1, NULL)) / COUNT(s.user_id), 2) AS confirmation_rate
FROM
    signups s
LEFT JOIN
    confirmations c ON s.user_id = c.user_id
GROUP BY
    s.user_id;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

�Destiny;

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值