1-10
【1757 可回收且低脂的产品】 判断等于的时候直接用=,另外与用的是AND
【584 寻找用户推荐人】进行不等于判断的时候直接用!=或者<>,另外判断是NULL的时候用IS
【595 大的国家】大于等于用>=
(总结一下进行大小判断的时候就是原先那些,然后就是NULL用的IS)
【1148 文章浏览】去重就在前面添加上DISTINCT,别名用as,排序在最后用ORDER BY,默认是升序
【1683 无效的推文】一个varchar类型的长度用length()函数
【1378 使用唯一标识码替换员工ID】重点是LEFT JOIN ON 的格式
【1068 产品销售分析1】重点是inner join等价于join
【1581 进店却未进行过交易的顾客】重点是GROUP BY xx对xx进行分组,然后计算count
【197 上升的温度】这道题的难点一个是构造笛卡尔积,第二个是使用datadiff函数去找到前一天的内容
【1661 每台机器的进程平均运行时间】自连接这点想到了,但是自连接的条件没有想到,分组可以想到

11-20
【577 员工奖金】很简单,过
【1280 学生们参加各科测试的次数】这道题的难点在于如何进行三表查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT
s.student_id,
s.student_name,
su.subject_name,
COUNT(e.subject_name) AS attended_exams
FROM
Students AS s
JOIN
Subjects AS su
LEFT JOIN
Examinations AS e
ON
e.student_id = s.student_id
AND
e.subject_name = su.subject_name
GROUP BY
s.student_id,
su.subject_name
ORDER BY
s.student_id,
su.subject_name

【570 至少有5名直接下属的经理】这道题的难点在于having这个关键字的使用

1
2
3
4
5
6
7
8
select name
from Employee
where id in(
select managerId
from Employee
group by managerId
having count(managerId) >= 5
)

【1934 确认率】挺难的,关于sum里的if的用法,round的用法,还有就是count里null的计算

1
2
3
4
select a.user_id,
round(sum(if (b.action='confirmed',1.00,0.00)) / count(a.user_id), 2) as confirmation_rate
from Signups a left join Confirmations b on a.user_id = b. user_id
group by a.user_id

【620】有趣的电影:降序的关键字是DESC,同时余数可以用mod(xx,2)
【1251 平均售价】一个是日期可以用between and,还有一个是IFNULL的用法(重点是IFNULL不是ISNULL)
【1075 项目员工1】很简单,过
【1633 各赛事的用户注册率】这道题依旧需要用到两个表,但是不需要连接,这样的情况要如何写代码
不想连接,那就嵌套,在select语句里也可以嵌套select,只不过要看清楚这个select count(*) from x的语法是怎么写的

1
2
3
4
5
select r.contest_id, round(count(r.user_id)*100 / (select count(*) from Users),2) 
as percentage
from Register r
group by r.contest_id
order by percentage DESC, contest_id

注: COUNT(SELECT * FROM Users)在语法上是不允许的,因为COUNT不接受子查询作为参数。
【1211 查询结果的质量和占比】主要是非空的判断,可以直接用where语句
【1193 每月交易】当group by分组的依据不再是相等的分为一组,而是按照一个区间一个区间分组,应该怎么办?使用 DATE_FORMAT() 函数将日期按照 %Y-%m输出比如2019-01-02转换成2019-01

1
2
3
4
5
6
7
select DATE_FORMAT(trans_date, '%Y-%m') as month, country,
COUNT(*) AS trans_count,
COUNT(IF(state = 'approved', 1, NULL)) AS approved_count,
SUM(amount) AS trans_total_amount,
SUM(IF(state = 'approved', amount, 0)) AS approved_total_amount
from Transactions
group by month, country