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的更多相关文章

  1. leetcode

    Coding on LeetCode Online Judge leetcode(leetcode website) Problems algorithms 13. Roman to Integer ...

  2. leetcode database题目

    LeetCode有10道SQL的题目,最近学习SQL语言,顺便刷题强化一下, 说实话刷完SQL学习指南这本书,不是很难,上面的例子 跟语法规则我都能理解透, 实际中来做一些比较难的业务逻辑题,却一下子 ...

  3. leetcode - database - 177. Nth Highest Salary (Oracle)

    题目链接:https://leetcode.com/problems/nth-highest-salary/description/ 题意:查询出表中工资第N高的值 思路: 1.先按照工资从高到低排序 ...

  4. LeetCode Database: Delete Duplicate Emails

    Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique ...

  5. 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 ...

  6. LeetCode Database: Consecutive Numbers

    Consecutive Numbers Write a SQL query to find all numbers that appear at least three times consecuti ...

  7. LeetCode Database题解

    175. Combine Two Tables 使用外连接即可. # Write your MySQL query statement below select FirstName, LastName ...

  8. leetcode中Database题(一)

    Combine Two Tables Table: Person +-------------+---------+ | Column Name | Type | +-------------+--- ...

  9. [leetcode] database解题记录

    175 Combine Two Tables 题目:左连接Person表和Address表. select FirstName,LastName,City,State from Person p le ...

随机推荐

  1. 【转】最简单的CI框架入门示例--数据库取数据

    1.下载CI框架(自己找) 2.配置 database.php配置:    为数据库服务器设置 connection 参数: $db['default']['hostname'] = "yo ...

  2. Ngrok 内网穿透利器

    Ngrok是什么 Ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.Ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放 为什么要使用Ngrok ...

  3. JQuery通过$(xxx...)返回对象

    var JQ = function () { return new JQ.prototype.init(); }; JQ.prototype.init = function () { }; JQ.pr ...

  4. IOS事件处理机制(关于触发者和响应者的确认)

    事件处理机制 在iOS中发生触摸后,事件会加入到UIApplication事件队列(在这个系列关于iOS开发的第一篇文章中我们分析iOS程序原理的时候就说过程序运行后UIApplication会循环监 ...

  5. 使用ASP.NET web API创建REST服务(二)

    Creating a REST service using ASP.NET Web API A service that is created based upon the architecture ...

  6. 如何写出无法维护的代码(JAVA版)

    程序命名(针对那些不能混淆的代码) 容易输入的名字.比如:Fred,asdf 单字母的变量名.比如:a,b,c, x,y,z,或者干脆上中文比如(阿隆索肯德基) 有创意地拼写错误.比如:SetPint ...

  7. ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件

    原文:ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件 先看效果图,然后上代码: <UserControl x:Class= ...

  8. sql server 2008语句中的go有什么用?

    GO表示一个批处理的结束, SQLSERVER遇到Go以后就会将GO之前的语句作为一整批进行处理你在SSMS里执行的时候, 通常加不加都可以,但是如果实在SQLCMD下执行, GO就是一个执行命令了另 ...

  9. Selenium2学习-029-WebUI自动化实战实例-027-判断元素是否存在

    非常简单的源码,敬请各位小主参阅.若有不足之处,敬请大神指正,不胜感激! /** * Verify the element exist or not * * @author Aaron.ffp * @ ...

  10. php保存远程文件到本地的方法

    用到了ob_start();<?php header("Content-type:text/html charset=utf-8"); if(!empty($_POST['p ...