Leetcode 题解 (SQL)

2017-03-16  本文已影响0人  walker_liu_fei

<a href = "https://www.hackerrank.com/challenges/occupations">Occupations</a>

典型的按 某个列的值,进行按列分类查询的例子。

这一步完成创建一个 表,将 属性分类,但是会有很多个 NULL 在里面!。

<a href="https://www.hackerrank.com/challenges/the-report">The Report</a>

一个联表查询,不同的是。它的对应关系比较特别,一个表的数据需要对应另一个表的区间值。这个可以直接用一个 联合的判断语句来进行筛选,在这里就时 on student.mark >= gtades.min_mark && students.mark <= grade.max_mark

<a href = "https://www.hackerrank.com/challenges/full-score">Top Competitors </a>

本题的难度在于怎么解决 某个出现在表中的元素出现的次数,并利用这个次数哦作为筛选条件?

<pre>
set @pre_id = -1,@count = 0;
select hacker_id,name from hackers inner join (select h_id,case
when @pre_id = h_id then @count := @count +1
else @count := 0
end count , @pre_id,@pre_id := h_id from difficulty inner join (select
submissions.hacker_id h_id,submissions.score score,challenges.difficulty_level d_level from
submissions inner join challenges on submissions.challenge_id = challenges.challenge_id
order by h_id)r1 on r1.d_level = difficulty_level && r1.score = difficulty.score) r2 on
hackers.hacker_id = r2.h_id where r2.count >= 1 group by hacker_id order by max(count)
desc ,hacker_id;

</pre>

在利用 一个元素的max(xxx) ,或者 case 时,没有必要将这个列作为 select 的选项之一 select 出来!

上一篇 下一篇

猜你喜欢

热点阅读