top10_sql_skills

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
-- 01
-- bad
create table cm.tb_user(
id int,
name varchar(255),
age int,
gender varchar(16)
);
-- good
create table cm.tb_user(
id int primary key,
name varchar(255),
age int,
gender varchar(16),
store_time datetime default now()
);

-- 02
-- bad
create table cm.tb_user(
id int primary key ,
name varchar(255) not null default 'NULL',
age int,
gender varchar(16),
create_time datetime default now(),
update_time datetime default now()
);
-- good
create table cm.tb_user(
id int primary key ,
name varchar(255) not null default '-',
age int,
gender varchar(16),
store_time datetime default now(),
update_time datetime default now()
);

-- 03
-- bad
select min(age), max(age) from cm.tb_user where age < 40 group by gender;
-- good
select
min(age),
max(age)
from cm.tb_user
where age < 40
group by gender;

-- 04
-- bad
select id,
name
from cm.tb_user
where age > 10
and id<=10010;
-- good
select id,
name
from cm.tb_user
where 1=1
and age > 10
and id<=10010;

-- 05
-- bad
insert into cm.tb_user
values
(1001, 'Mike', 20, 'M');
-- good
insert into cm.tb_user
(id, name, age, gender)
values
(1001, 'Mike', 20, 'M');

-- 06
-- good
explain
select *
from cm.tb_user
where id=1001 and age = 20;

-- 07
-- bad
select *
from cm.tb_user;
-- good
select id,
name
from cm.tb_user;

-- 08
-- 分批次+limit进行delete或update
delete
from cm.tb_user
where age > 35
limit 5;

-- 09
-- bad
delete from cm.tb_user
where age <= 20;
update cm.tb_user
set age = age + 1;
-- good
begin;
delete from cm.tb_user
where age <= 20;
update cm.tb_user
set age = age + 1;
commit;

-- 10
-- data sample
insert into cm.data_count
(dt, count)
values
('2023-06-20', 101),
('2023-06-21', 231),
('2023-06-22', 170),
('2023-06-23', 146),
('2023-06-24', 187),
('2023-06-25', 123),
('2023-06-26', 221),
('2023-06-27', 101),
('2023-06-28', 103),
('2023-06-29', 122),
('2023-06-30', 144);
-- bad
select dt, count
from cm.data_count t1;
-- good
select
t1.dt,
t1.count * 1.0 / t2.count as ratio
from cm.data_count t1
join cm.data_count t2
on datediff(t1.dt, t2.dt)=7;

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 richffan@outlook.com

文章标题:top10_sql_skills

字数:351

本文作者:Rich Fan

发布时间:2023-08-01, 00:00:00

最后更新:2024-02-27, 08:17:39

原始链接:http://fanrich.github.io/2023/07/31/SQL/top10_sql_skills/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。