Data Analysis

mysql易错点汇总||记我在踩过的坑2

2019-11-27  本文已影响0人  戈小蓓

1、not in 和!=的区别,什么时候用什么?

!= 和=用来判断具体的值,而NULL需要用is或者is not判断(只能用is或is not,且like或not like不能判断)
not in的结果集中出现null则查询结果为null;

2、求奇数或者偶数怎么做?
奇数: &1 、 mod2=1
eg:mod(id,2) = 1 返回id号是奇数的id
偶数 字段=(字段>>1)<<1 、mod2=0
3、count()函数
count(*)---包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会忽略列值为NULL的记录
4、怎么查找比昨天大的数据(日期比较)
dataiff(data1,data2)=1
注意:data1-data2
5、第一次购买时间怎么求?
select id,min(时间字段) from 表名 group by id
6、窗口函数
语法:rank() over (partition by A order by B)
rank() :跳跃排名,比如有重复,下一个会跳过占用的名次
dense_rank():连续排序,相同名次并列并且下一个是连续的
row_number():没有重复值的排序
eg:
rank() over (order by 成绩 desc) as ranking
dense_rank() over (order by 成绩 desc) as dese_rank
row_number() over (order by 成绩 desc) as row_num
注:容易漏写前面的()

7、换座位(突破点在思维转变)
换座位:有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。
其中纵列的 id 是连续递增的,小美想改变相邻俩学生的座位。学生人数是奇数,则不需要改变最后一个同学的座位。

答案:
SELECT (CASE 
when mod (id,2) = 1 AND id = (SELECT COUNT(*) FROM seat) THEN id
            WHEN MOD(id,2) = 1 THEN id+1
            ElSE id-1 END) AS id, student
FROM seat ORDER BY id;
思路分析:交换学生位次转为id的变化。id为奇数则和下一个偶数交换,id+1

8、同一张表的连续重复数据
什么是连续出现3次?某列是按顺序排列,如果乱序需要先拍顺序在构造三章一样的表
自连接(自身连接)的本质是把一张表复制出多张一模一样的表来使用

select distinct l1.Num as 重复3次 
from Logs as t1,Logs as t2,Logs as t3 where
t1.Num = t2.Num and t2.Num = t3.Num and t1.Id = t2.Id -1 and t2.Id = t3.Id -1

9、汇总月份统计销量
MySql按周,按月,按日分组统计数据、日期计算。并统计环比、同比

eg:
select DATE_FORMAT(date,'%Y-%m') as month,sum(money) as money   
from finance   
where DATE_FORMAT(date,'%Y')=2010   
group by month   
order by month
上一篇 下一篇

猜你喜欢

热点阅读