DataBase: LeetCode
Combine Two Tables
# Write your MySQL query statement below
Select p.FirstName, p.LastName, a.City, a.State from Person p left join Address a on p.PersonId = a.PersonId
Consecutive Numbers
# Write your MySQL query statement below
select distinct num from (
select num, count(rank) as cnt from (
select num, @cur := @cur + if(@prev = num, 0, 1) as rank, @prev := num
from Logs s, (select @cur := 0) r, (select @prev := null) p
order by id asc
) t group by rank having cnt >= 3
) n;
个人觉得还是用下面这个简单的好
# Write your MySQL query statement below
select distinct l1.Num from Logs l1, Logs l2, Logs l3 where l1.Id + 1 = l2.Id and l1.Id + 2 = l3.Id and l1.Num = l2.Num and l1.Num = l3.Num;
Customers Who Never Order
# Write your MySQL query statement below
select c.Name from Customers c left join Orders o on c.Id = o.CustomerId where o.Id is null
# Write your MySQL query statement below
select c.Name from Customers c where c.Id not in (select CustomerId from Orders o)
# Write your MySQL query statement below
select c.Name from Customers c where not exists (select c.Id from Orders o where o.CustomerId = c.Id)
in和exists的区别参考http://www.cnblogs.com/seasons1987/archive/2013/07/03/3169356.html
可以这么理解,我们偏向于:
select * from 大表 where cc in (select cc from 小表); 因为in相当于内表(这里是小表)与外表的hash连接,因此内表应选择小表
select * from 小表 where exists (select cc from 大表 where cc = 小表.cc); 因为exists是先对外表(这里是小表)做loop,再在后面exists里面的语句(内表)进行查询,因此外表要选择小表
Delete Duplicate Emails
# Write your MySQL query statement below
delete p1 from Person p1 inner join Person p2 where p1.email = p2.email and p1.Id > p2.Id
# Write your MySQL query statement below
delete from p1 using Person p1 inner join Person p2 where p1.email = p2.email and p1.Id > p2.Id
# Write your MySQL query statement below
delete from Person where Id not in (select * from (select min(Id) from Person p group by Email) t)
注意下面这个语句会出现BUG
# Write your MySQL query statement below
delete from Person where Id not in (select min(Id) from Person p group by Email)
错误提示为:You can't specify target table 'Person' for update in FROM clause
这个错误为在MySQL中,禁止在FROM子句中指定被更新的目标表。也就是说用Min或者max的时候要在外面再套一层select,这个错误只有在MYSQL中有,在MSSQL和Oracal中没有(好奇怪。。)
Department Highest Salary
# Write your MySQL query statement below
select d.name as Department, t.Salary, e.Name as Employee from Employee e inner join (select DepartmentId, max(salary) as Salary from Employee group by DepartmentId) t using (DepartmentId, Salary) inner join Department d on d.Id = t.DepartmentId
SQL的顺序一般从from后面开始,再是select,最后是order by
下面这段代码更加容易理解
# Write your MySQL query statement below
select d.Name Department, e.Name Employee, s.Salary from (
select MAX(e.Salary) Salary, e.DepartmentId from Employee e, Department d where e.DepartmentId = d.Id group by e.DepartmentId
) s, Employee e, Department d where s.Salary = e.Salary and e.DepartmentId = d.Id and e.DepartmentId = s.DepartmentId;
Departmet Top Three Salaries
# Write your MySQL query statement below
select D.Name as Department, E.Name as Employee, E.Salary as Salary
from Employee E, Department D
where (select count(distinct(Salary)) from Employee where DepartmentId = E.DepartmentId and Salary > E.Salary) in (0, 1, 2)
and
E.DepartmentId = D.Id
order by E.DepartmentId, E.Salary DESC;
太难了。。
Duplicate Emails
# Write your MySQL query statement below
select distinct(p.Email) from Person p, Person q where p.Id != q.Id and p.Email = q.Email
# Write your MySQL query statement below
select Email from Person group by Email having count(*) > 1
Employees Earning More Than Their Managers
# Write your MySQL query statement below
select e1.Name from Employee e1, Employee e2 where e1.ManagerId = e2.Id and e1.Salary > e2.Salary
Rank Scores
# Write your MySQL query statement below
select Score, Rank from (
select Score, @cur := @cur + if(@prev = Score, 0, 1) as Rank, @prev := Score from
Scores s, (select @cur := 0) r, (select @prev := null) p order by Score desc) t
Rising Temperature
# Write your MySQL query statement below
select w1.Id from Weather w1 join Weather w2 where to_days(w1.Date) = to_days(w2.Date) + 1 and w1.Temperature > w2.Temperature
Second Highest Salary
# Write your MySQL query statement below
select max(Salary) from Employee where Salary < (select max(Salary) from Employee)
DataBase: LeetCode的更多相关文章
- leetcode
Coding on LeetCode Online Judge leetcode(leetcode website) Problems algorithms 13. Roman to Integer ...
- leetcode database题目
LeetCode有10道SQL的题目,最近学习SQL语言,顺便刷题强化一下, 说实话刷完SQL学习指南这本书,不是很难,上面的例子 跟语法规则我都能理解透, 实际中来做一些比较难的业务逻辑题,却一下子 ...
- leetcode - database - 177. Nth Highest Salary (Oracle)
题目链接:https://leetcode.com/problems/nth-highest-salary/description/ 题意:查询出表中工资第N高的值 思路: 1.先按照工资从高到低排序 ...
- LeetCode Database: Delete Duplicate Emails
Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique ...
- LeetCode Database: Rank Scores
Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ra ...
- LeetCode Database: Consecutive Numbers
Consecutive Numbers Write a SQL query to find all numbers that appear at least three times consecuti ...
- LeetCode Database题解
175. Combine Two Tables 使用外连接即可. # Write your MySQL query statement below select FirstName, LastName ...
- leetcode中Database题(一)
Combine Two Tables Table: Person +-------------+---------+ | Column Name | Type | +-------------+--- ...
- [leetcode] database解题记录
175 Combine Two Tables 题目:左连接Person表和Address表. select FirstName,LastName,City,State from Person p le ...
随机推荐
- common.js
//检测浏览器 function checkb(){ var Sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua. ...
- nginx搭建http和rtmp协议的流媒体服务器
nginx搭建http和rtmp协议的流媒体服务器 时间:2013-09-23 23:52来源:佚名 作者:本站 举报 点击:232次 实验目的:让Nginx支持flv和mp4格式文件,同时支持Rtm ...
- spark之combineByKey
combineByKey def combineByKey[C](createCombiner: (V) => C, mergeValue: (C, V) => C, mergeCombi ...
- Redis学习笔记(1)-Key
package cn.com; import java.text.ParseException; import java.util.List; import java.util.Set; import ...
- HBase的安装部署以及简单使用
一:下载安装 1.下载安装 2.开启hadoop与zookeeper 3.修改配置文件hbase-env export JAVA_HOME=/opt/modules/jdk1.7.0_67 expor ...
- Qt的IDE开发环境(KDevelop,MonKey Studio,QDevlop,Dev-cpp,Cobras,Edyuk)
讲到Qt的IDE开发环境,本人一直在Windows下使用VC6.0 + Qt4.3.1开发程序.但转到Linux下,使用Fedora中自带的KDevelop + Qt4.3.1开发程序. 最近一直做Q ...
- httpd.conf
修改配置文件-时会弹出一个文本式的文件 1.搜索:#LoadModule rewrite_module modules/mod_rewrite.so,去掉前面的# 2.全部替换AllowOverrid ...
- JS-JQ实现页面滚动时元素智能定位(顶部-其他部位)
先看效果: 阅读前提:充分理解div的三种定位方式:浮动,相对定位,绝对定位 方法一(顶部) 原理:直接使用css 进行控制:缺点:不兼容ie6-: 实现:positi ...
- pmp培训.rar
pmp培训.rar http://pan.baidu.com/s/1sleUQol
- Java foreach
foreach循环也叫增强型的for循环,或者叫foreach循环. foreach循环是JDK5.0的新特性(其他新特性比如泛型.自动装箱等). import java.util.Arrays; p ...