sql高级查询(SQL高级查询语句例句)

deer332025-07-18技术文章33

sql高级查询

我们每个人都会写sql基本的sql就是一个单表的增删改查

高级的sql使用一个连接查询几乎可以搞定

但是我们的sql在上一个等级

必须学会行转列

或者列转行的方式

窗口函数

查询案例

我们统计一个用户输赢的次数

转化成这样的格式信息

我们普通写sql的方式


select * from user where id =1 and remakr = "胜利"

这样只会统计一个数据不会统计多个数据


我们应该使用

case when 的写法

select

count( case when id = 1 then remakr else 0 end),

count( case when id = 2 then remakr else 0 end),

from user

这样的操作方式我们可以统计到所有的信息

如果发现这样的写法有点冗余的方式

我们换一个写法的方式

使用if关键字进行判断的方式

select

count( if(id=2,remark,0)),

count( case when id = 2 then remakr else 0 end),

from user

使用if和上门使用case when 的方式几乎功能相同

if看起来比较更加的简单

推荐使用我们if语法方式进行操作

我们通过使用if的方式可以轻松进行行转列的方式

sql经典的题目

sql的连续登录问题

现在有如下的表的方式

我们需要统计用户连续登录的问题

我们普通sql写法的方式

在一个表中查询一个用户是否连续登录问题

第一个思路

select date from user where name = 1

查询到当前时间在代码中进行对比的方式

第二思路进行解题的方式

有几个我们需要注意思考的问题

第一个必须是去重的

第二个我们可以通过临近日期进行比较的方式

我们使用窗口函数如果用户相同给用户进行一个排序的方式

我们可以得到一个值

窗口函数的方式

SELECT

*,

row_number() over( PARTITION BY stu_id ORDER BY stu_id ) AS rn

FROM

t_score


我们使用当前日期减去现在的值等到

select DATE_SUB(now,stu_id) as temp from t_score

使用date_sub减去rn的信息

得到现在值

这三个值相同

我们通过进行条件筛选的方式就可以得到这个数据的方式

我们现在可以通过进行where统计的方式

三个查询的方式

通过with t1 as的方式将三个查询拼接成一个sql的方式

总结

sql解题的关键

要排除空值

是否需要有顺序

是否需要去重

考虑这个三个问题

下面才是如何进行sql查询问题

我们进行sql查询