sql总结(高阶用法)

最近在做账单统计的需求,需要写较多的sql,也用到了很多以前没有用过的sql用法,通过本篇文章进行总结。

1.SUM() 和 CASE WHEN…

SUM(CASE WHEN `change_type` = -1 THEN total_amount ELSE 0 END) AS totalExpenditure

这是一个典型的用法,通过 SUM() 结合 CASE WHEN 条件,对满足条件的行的某个字段进行求和。在这个例子中,对于 change_type = -1 的行,将其 total_amount 字段进行求和,而对于不满足条件的行,将其置为0。最终获得总支出。

2.COUNT() 和 CASE WHEN…

COUNT(CASE WHEN `v_type` = -1 THEN -1 END) AS expenditureCount

这个用法是通过 COUNT() 结合 CASE WHEN,统计满足条件的行数。在这个例子中,对于 v_type = -1 的行返回 -1,最后通过 COUNT() 统计 -1 的数量,得到支出的个数。

3.COALESCE()

undefined COALESCE(SUM(total_amount),0.0) as totalAmount

COALESCE() 函数用于处理 NULL 值,如果 SUM(total_amount) 为 NULL,则将其替换为 0.0。这样可以避免在统计过程中出现 NULL 值导致的问题。

4.BETWEE

undefined `stat_time` BETWEEN #{startOfTime} AND #{endOfTime}"

BETWEEN 用于筛选某个范围内的值。在这个例子中,筛选出 stat_time 位于 startOfTime 和 endOfTime 之间的记录,包括这两个时间点。

5.UNION

SELECT ...
UNION
SELECT ...

UNION 用于合并两个查询的结果集,去除重复的行。在这个例子中,通过两个 SELECT 语句统计不同条件下的数据,并将结果集合并在一起,相当于求并集。

6. GROUP BY a,b 组合分组

 GROUP BY a,b;

GROUP BY 用于将结果集按照指定的列进行分组。在这个例子中,根据列 a 和 b 进行组合分组。

7. 正则表达式

+ "    CASE  "
            + "        WHEN causetype = 'A' AND comment REGEXP 'gid为【([0-9]+)】的xxxx' THEN  "
            + "            CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(comment, 'gid为【', -1), '】', 1) AS UNSIGNED) "
            + "        ELSE 0  "
 + "    END AS ngid, "

这里使用了正则表达式 (REGEXP) 来匹配符合特定条件的 comment 字段。当 causetype = ‘A’ 且 comment 字段符合正则表达式时,提取出其中的 gid 值。如果不符合条件,则返回 0。

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL 提供了一些高阶的查询语句用法,可以帮助我们更灵活、高效地进行数据查询。以下是一些常用的高阶用法: 1. 子查询: 子查询是将一个查询嵌套在另一个查询中的查询结构。它可以用作 `SELECT` 语句中的列、`FROM` 子句中的表、`WHERE` 子句中的条件等。 示例: ```sql SELECT column_name FROM table_name WHERE column_name IN (SELECT column_name FROM another_table WHERE condition); ``` 2. 联合查询: 联合查询用于将两个或多个查询的结果合并成一个结果集。可以使用 `UNION` 或 `UNION ALL` 运算符来执行联合查询。 示例: ```sql SELECT column_name FROM table1 UNION SELECT column_name FROM table2; ``` 3. 分页查询: 分页查询用于在结果集中进行分页显示数据。可以使用 `LIMIT` 子句指定要返回的记录数量,并使用 `OFFSET` 子句指定要跳过的记录数量。 示例: ```sql SELECT column_name FROM table_name LIMIT number_of_rows OFFSET offset_value; ``` 4. 排序: 可以使用 `ORDER BY` 子句对查询结果进行排序。可以按照一个或多个列进行升序或降序排序。 示例: ```sql SELECT column_name FROM table_name ORDER BY column_name ASC; ``` 5. 聚合函数和分组: 使用聚合函数(如 `SUM`、`AVG`、`COUNT` 等)可以对数据进行聚合计算。可以结合 `GROUP BY` 子句将结果集按照一个或多个列进行分组。 示例: ```sql SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name; ``` 这些是一些常用的 MySQL 查询语句高阶用法,可以根据具体需求进行学习和使用。此外,MySQL 还提供了其他高级特性,如窗口函数、子查询优化、索引优化等,可以进一步提升查询性能和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

酱学编程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值