sql 取一个月日期去掉周末的所有日期_LeetCode:SQL

一、简单

175.组合两个表

632810a06b7a6e346d58fe628505bfcf.png

1fb0eba0015400f6fe69e420304e6d36.png

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

7fc995393736f9c912c7b1a137db5eb0.png
select FirstName, LastName, City, State 
from Person p 
left join Address a on p.PersonId = a.PersonId;

176.第二高薪水

编写一个 SQL 查询,获取Employee 表中第二高的薪水(Salary) 。

c06b86fba9f67bc6e325fc302ef8b97b.png

例如上述 Employee 表,SQL查询应该返回 200作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回null

7539ff7ee667504b890d4149931b747e.png
select max(Salary) as SecondHighestSalary 
from Employee 
where Salary < (select max(Salary) from Employee);

181.超过经理收入的员工

Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。

2378dd53c995f28c2cf80d5f697fe299.png

给定 Employee 表,编写一个 SQL 查询,该查询可以获取收入超过他们经理的员工的姓名。在上面的表格中,Joe 是唯一一个收入超过他的经理的员工。

a683663a3d66b531ee19264602a1171d.png
select a.Name as Employee 
from Employee a, Employee b 
where a.ManagerId = b.Id and a.Salary > b.Salary;

182.查找重复的电子邮箱

编写一个 SQL 查询,查找 Person表中所有重复的电子邮箱。

9e358c676f58c8334157295064cddfdc.png

根据以上输入,你的查询应返回以下结果:

0f5e3cdba0ecf54165c870f80f535f72.png
select c.Email as Email 
from
(select Email, count(Email) as co_email from Person group by Email) c
where c.co_email > 1;

183.从不订购的客户

某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。

Customers 表:

abd5c8bc3b1ac7c01777e2526f4098b1.png

Orders表:

a05e891ddf1eb4bd9112d3a52717f1cb.png

例如给定上述表格,你的查询应返回:

f76e0543497494ed392dd84eb9096463.png
select name as Customers 
from(
      select c.Name as name, o.Id as OrderId 
      from Customers c 
      left join Orders o on c.Id = o.CustomerId
    ) co
where OrderId is null;

196.删除重复的电子邮箱

编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

f7f458d910c466b5327f133c114ec0df.png

例如,在运行你的查询语句之后,上面的Person表应返回以下几行:

275bf4e5a950ef2f0f6a6f1d78e877a4.png
DELETE p1
FROM Person p1,
     Person p2
WHERE
    p1.Email = p2.Email AND p1.Id > p2.Id;

197.上升的温度

给定一个Weather表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id。

faecef334551117e37e6c28ad7c1bdbd.png

例如,根据上述给定的Weather表格,返回如下 Id:

337e893602c2762acf0c450ff1ad447a.png

(1)TO_DAYS函数,用来将日期换算成天数

select w1.Id 
from Weather w1, Weather w2
where w1.Temperature > w2.Temperature and TO_DAYS(w1.RecordDate) = TO_DAYS(w2.RecordDate) + 1;

(2)DataDiff函数计算两个日期的差值

select w1.Id 
from Weather w1, Weather w2
where w1.Temperature > w2.Temperature and datediff(w1.RecordDate,w2.RecordDate) = 1;

(3)SUBDATE函数,实现日期减一

select w1.Id 
from Weather w1, Weather w2
where w1.Temperature > w2.Temperature and subdate(w1.RecordDate,1) = w2.RecordDate;

596.超过5名学生的课

有一个courses 表 ,有: student (学生)class (课程)

请列出所有超过或等于5名学生的课。

例如,表:

475e809c43423cac1471c338bb122485.png

应该输出:

d53b3739288757e2abadc68ad0615579.png

Note:

学生在每个课中不应被重复计算。

select class
from(
     select class, count(distinct student) as num
     from courses
     group by class
    ) as c
where num >= 5;

620.有趣的电影

某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。

作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为非 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列。

例如,下表 cinema:

0b9501c0927335882cf306382d212242.png

对于上面的例子,则正确的输出是为:

f8853329477a00aca937a5cd910bb293.png
select id, movie, description, rating
from cinema
where id%2 = 1 and description != 'boring'
order by rating desc;

627.交换工资

给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求只使用一个更新(Update)语句,并且没有中间的临时表。

注意,您必只能写一个 Update 语句,请不要编写任何 Select 语句。

例如:

03290f920a5b578a327ea9a374374d64.png

运行你所编写的更新语句之后,将会得到以下表:

42532b3f2f8349bb07ea248767a241f3.png
UPDATE salary
SET
    sex = CASE sex
          WHEN 'm' THEN 'f'
          ELSE 'm'
          END;

1179.重新格式化部门表

部门表 Department

+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| revenue | int |
| month | varchar |
+---------------+---------+
(id, month) 是表的联合主键。
这个表格有关于每个部门每月收入的信息。
月份(month)可以取下列值 ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]。

编写一个 SQL 查询来重新格式化表,使得新的表中有一个部门 id 列和一些对应 每个月 的收入(revenue)列。

查询结果格式如下面的示例所示:

Department 表:
+------+---------+-------+
| id | revenue | month |
+------+---------+-------+
| 1 | 8000 | Jan |
| 2 | 9000 | Jan |
| 3 | 10000 | Feb |
| 1 | 7000 | Feb |
| 1 | 6000 | Mar |
+------+---------+-------+

查询得到的结果表:
+------+-------------+-------------+-------------+-----+-------------+

| id | Jan_Revenue | Feb_Revenue | Mar_Revenue | ... | Dec_Revenue |

+------+-------------+-------------+-------------+-----+-------------+

| 1 | 8000 | 7000 | 6000 | ... | null |

| 2 | 9000 | null | null | ... | null |

| 3 | null | 10000 | null | ... | null |

+------+-------------+-------------+-------------+-----+-------------+

SELECT id,
       SUM(CASE month WHEN 'Jan'  THEN revenue ELSE null END) AS 'Jan_Revenue',
       SUM(CASE month WHEN 'Feb'  THEN revenue ELSE null END) AS 'Feb_Revenue',
       SUM(CASE month WHEN 'Mar'  THEN revenue ELSE null END) AS 'Mar_Revenue',
       SUM(CASE month WHEN 'Apr'  THEN revenue ELSE null END) AS 'Apr_Revenue',
       SUM(CASE month WHEN 'May'  THEN revenue ELSE null END) AS 'May_Revenue',
       SUM(CASE month WHEN 'Jun'  THEN revenue ELSE null END) AS 'Jun_Revenue',
       SUM(CASE month WHEN 'Jul'  THEN revenue ELSE null END) AS 'Jul_Revenue',
       SUM(CASE month WHEN 'Aug'  THEN revenue ELSE null END) AS 'Aug_Revenue',
       SUM(CASE month WHEN 'Sep'  THEN revenue ELSE null END) AS 'Sep_Revenue',
       SUM(CASE month WHEN 'Oct'  THEN revenue ELSE null END) AS 'Oct_Revenue',
       SUM(CASE month WHEN 'Nov'  THEN revenue ELSE null END) AS 'Nov_Revenue',
       SUM(CASE month WHEN 'Dec'  THEN revenue ELSE null END) AS 'Dec_Revenue'
FROM Department
GROUP BY id;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值