1. COALESCE()函数
COALESCE()函数是一种在SQL中常用的函数,用于返回参数列表中的第一个非空值。它接受多个参数,并按照参数的顺序逐个评估,返回第一个非空值。如果所有参数都为空,则返回NULL。 COALESCE()函数的语法如下:
COALESCE(value1, value2, ..., valuen)
其中,value1, value2, …, valuen是要评估的参数列表。 COALESCE()函数的工作原理如下:
-
从左到右逐个评估参数。
-
如果当前参数的值不为空(非NULL),则返回该值。
-
如果当前参数的值为空(NULL),则继续评估下一个参数
-
如果所有参数都为空(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() 函数的一些示例用法:
- 四舍五入到整数:
SELECT ROUND(3.7); – 结果为 4- 四舍五入到指定的小数位数:
SELECT ROUND(3.14159, 2); – 结果为 3.14- 四舍五入到负数位数(十位、百位等):
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;