mysql 查找在另一张表不存在的数据
mysql 查找在另一张表不存在的数据 - 走看看
有三种方法:
1. SELECT * FROM Call WHERE phone_number NOT IN (SELECT phone_number FROM Phone_book)
2. SELECT * FROM Call WHERE NOT EXISTS (SELECT * FROM Phone_book WHERE Phone_book.phone_number = Call.phone_number)
3. SELECT * FROM Call LEFT OUTER JOIN Phone_Book>
大厂数据开发老司机送给数据工程师的10条建议,建议先收藏再细品!
10、关联数据之前,先检查维度表,各维度的值是否有异常,比如null,空值,异常值等等。
9、进行聚合操作后,检查聚合后的数据值是否合理,比如sum求和后的值,找一些已有的数据做核对。
8、left join之后的数据是否有重复,关联字段是否存在一对多的情况,是否符合业务预期。
7、查看上下游指标间的关联关系,是否存在统计相加之后的值和前序依赖对应的不上。
6、重刷数据一定要先新建一个任务,特别是任务由于上有修改表结构导致的任务失败,新建任务,写入临时表进行数据核对后再刷新原任务运行后续依赖。
5、修改表、删除表之前一定要先备份,防止“删库跑路”情况出现。
4、烟囱式开发,同一个维度在整个数据平台中不一致,维度数据要跟主数据关联起来。
3、过度钻研数据处理技术,忽略业务逻辑,有时候优化一条SQL,也许只是业务逻辑的变通。
2、只管开发和运维任务,不总结。形成团队的wiki进行开发和运维问题处理知识总结,会大大提高团队问题处理效率。
1、忽略数仓对业务成功的支持,只关注效率上的提升,“黑猫白猫,只要抓住老鼠就是好猫”,没有被业务认可的数据团队,长久不了。#大数据# #数据开发# #程序员# #数据工程师#
50个常用sql语句(22——25)
22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)
[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩
SELECT DISTINCT top 3
SC.S# As 学生学号,
Student.Sname AS 学生姓名 ,
T1.score AS 企业管理,
T2.score AS 马克思,
T3.score AS UML,
T4.score AS 数据库,
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分
FROM Student,SC LEFT JOIN SC AS T1
ON SC.S# = T1.S# AND T1.C# = '001'
LEFT JOIN SC AS T2
ON SC.S# = T2.S# AND T2.C# = '002'
LEFT JOIN SC AS T3
ON SC.S# = T3.S# AND T3.C# = '003'
LEFT JOIN SC AS T4
ON SC.S# = T4.S# AND T4.C# = '004'
WHERE student.S#=SC.S# and
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)
NOT IN
(SELECT
DISTINCT
TOP 15 WITH TIES
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)
FROM sc
LEFT JOIN sc AS T1
ON sc.S# = T1.S# AND T1.C# = 'k1'
LEFT JOIN sc AS T2
ON sc.S# = T2.S# AND T2.C# = 'k2'
LEFT JOIN sc AS T3
ON sc.S# = T3.S# AND T3.C# = 'k3'
LEFT JOIN sc AS T4
ON sc.S# = T4.S# AND T4.C# = 'k4'
ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);
23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]
SELECT SC.C# as 课程ID, Cname as 课程名称
,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]
,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]
,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]
,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]
FROM SC,Course
where SC.C#=Course.C#
GROUP BY SC.C#,Cname;
24、查询学生平均成绩及其名次
SELECT 1+(SELECT COUNT( distinct 平均成绩)
FROM (SELECT S#,AVG(score) AS 平均成绩
FROM SC
GROUP BY S#
) AS T1
WHERE 平均成绩 > T2.平均成绩) as 名次,
S# as 学生学号,平均成绩
FROM (SELECT S#,AVG(score) 平均成绩
FROM SC
GROUP BY S#
) AS T2
ORDER BY 平均成绩 desc;
25、查询各科成绩前三名的记录:(不考虑成绩并列情况)
SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 3 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC
)
ORDER BY t1.C#;
sql语法高级玩法:select count 可以跟 count(distinct xxx) 然后接group by ,再连left join, right join, 再接having 一起,完成复杂的数据条件过滤。
#Java#今天去了一家非外包公司,做电商的,上来给我来4道SQL题,我看完第一反应,就这?
结果做完3道题目有问题,其中有1道面试官一说我就反应过来了,另外2道涉及到了盲区
1.学生表跟学校表联查,要求显示学校每个学校的学生数量,学校没人也得显示,用left join连接,然后我大意了,写了个count,面试官问我count没什么问题吗?我马上反应过来count后面接1会把空的也算进计数,跟他说了,算是过关
2.查询列出学校名,男生人数,女生人数,写了个很复杂的SQL,他问我能不能简单点,涉及到了我的盲区,回家问百度才知道答案
3,查询出学校、学生对应关系,有的学生没有学校,有的学校没有学生也列出来,我用了个union,被他问了知不知道union和union all的区别
Mr.Darcy did something that may make Elizabeth happy.
CHAPTER 43
Mr.Darcy took her place by her niece, and they walked>
#今日阅读文章分享# Don't make these job interview mistakes. 职场英语:面试时应避免的错误!
1. Don't trash your old boss.别诋毁前上司。
First, don't bad-mouth your previous employer when asked why you left or are seeking a new job elsewhere.
"You should not throw your previous leader or company under the bus, even if it's true that you are leaving a toxic environment or horrible boss."
Instead, focus>
Excel常用公式(六)
文本处理类
1、=TEXT(10,"0000")
一句话介绍:按照指定的格式将数字10显示为0010
函数格式:TEXT(要处理的数据,格式代码)
2、=LEN(A1)
一句话介绍:得到A1单元格中数据的字符数
函数格式:LEN(要统计长度的数据或单元格)
3、=LENB(A1)
一句话介绍:得到A1单元格中数据的字节数
函数格式:LENB(要统计长度的数据或单元格)
4、=LEFT(A1,2)
一句话介绍:从A1左边截取两个字符
函数格式:LEFT(要截取的单元格或数,截取字数)
5、=LEFTB(A1,2)
一句话介绍:从A1左边截取两个字节
函数格式:LEFTB(要截取的单元格或数,截取字节数)
6、=RIGHT(A1,2)
一句话介绍:从A1右边截取两个字符
函数格式:RIGHT(要截取的单元格或数,截取字数)
7、=RIGHTB(A1,2)
一句话介绍:从A1右边截取两个字节
函数格式:RIGHTB(要截取的单元格或数,截取字节数)
8、=MID(A1,2,3)
一句话介绍:从A1右边截取两个字符
函数格式:MID(要截取的单元格或数,从第几个字开始,截取字数)
9、=MIDB(A1,2,3)
一句话介绍:从A1右边截取两个字节
函数格式:MIDB(要截取的单元格或数,从第几个字开始,截取字节数)
10、=FIND("A",A1,3)
一句话介绍:在A1单元格的第3个字开始找字母A,得到A在第几个字,区分大小写。
函数格式:FIND(找什么,在哪找,从第几个字开始找)
11、=FINDB("A",A1,3)
一句话介绍:在A1单元格的第3个字开始找字母A,得到A在第几个字,区分大小写。
函数格式:FINDB(找什么,在哪找,从第几个字开始找)
12、=SEARCH("A",A1,3)
一句话介绍:在A1单元格的第3个字开始找字母A,得到A在第几个字,不区分大小写。
函数格式:SEARCH(找什么,在哪找,从第几个字开始找)
13、=SEARCHB("A",A1,3)
一句话介绍:在A1单元格的第3个字开始找字母A,得到A在第几个字,不区分大小写。
函数格式:SEARCHB(找什么,在哪找,从第几个字开始找)
14、=SUBSTITUTE(B2,"2019年","",2)
一句话介绍:将B2单元格中的第2个2019年替换为空
函数格式:SUBSTITUTE(目标单元格,旧内容,新内容,替换第几个或全替换)
15、=REPLACE(F2,4,4,"****")
一句话介绍:将F2单元格中第4个字开始的4个字换成*
函数格式:REPLACE(原字符串,开始位置,字节个数,新字符串)
16、=REPLACEB(F2,4,5,"****")
一句话介绍:将F2单元格中第4个字开始的4个字换成*(以字节为单位)
函数格式:REPLACEB(原字符串,开始位置,字节个数,新字符串)
17、=REPT("ABC",5)
一句话介绍:将字符串ABC重复五次
函数格式:REPT(原字符串,重复次数)
18、=TRIM(A1)
一句话介绍:清理A1单元格中多余的空格
函数格式:TRIM(要处理的字符串)
19、=CLEAN(A1)
一句话介绍:删除A1单元格中所有非打印字符
函数格式:CLEAN(要处理的字符串)
20、=CHAR(65)
一句话介绍:得到系统代码65所对应的字符A
函数格式:CHAR(数字)
21、=CODE("A")
一句话介绍:得到字符A所对应的系统代码65
函数格式:CODE(字符)
22、=CONCATENATE(A2,"营业额",B2,"元")
一句话介绍:得到一个合并后的字符串
函数格式:CONCATENATE(字符串1,字符串2,……)
23、=PHONETIC(A1:C1)
一句话介绍:将单元格区域中的文本进行合并
函数格式:PHONETIC(单元格区域)
24、=CONCAT(A2:D2)
一句话介绍:将单元格区域中的内容进行合并
函数格式:CONCAT(单元格区域)
25、=TEXTJOIN("-",1,A2:D2)
一句话介绍:将单元格区域中的内容进行合并,并且以"-"分隔。
函数格式:TEXTJOIN(分隔符,是否忽略空单元格,合并内容1,合并内容2,……)