標籤:

SQLZOO練習記錄和總結

SQLZOO練習記錄和總結

來自專欄猴子聊數據分析1 人贊了文章

SQLZOO是很好的練習SQL初級查詢的網站,能快速的幫我們填平從學習到使用的鴻溝。在刷完SQLZOO所有題目後,把自己碰到的問題,做一下記錄和總結。

1. 特定排序問題

使用環境:a. NULL值不參與排序,如果要排序的列含有 NULL,NULL的行會在結果的開頭或末尾匯總顯示。b. 有時候我們需要讓某個值的數據都排在最前或最後

方法:結合搜索CASE表達式,將要排在前的賦值為0,排在後的賦值為1,然後對賦值的0和1排序,得到結果

例子:SELECT from Nobel Tutorial

代碼:

SELECT winner, subject FROM nobel WHERE yr = 1984

ORDER BY CASE WHEN subject IN (Chemistry,Physics) THEN 1 ELSE 0 END,

subject, winner;

2. 「沒有」的陷阱

先看上面這張表,問哪一年沒有C?

如果按subject<>C的情況來找年份,會發現由於一年中有好些subject,導致排除掉C仍然無法排除掉C所在的年份。所以正確的方法是按subject<>C的情況來找年份,再排除掉這些年份。

然後再看下面幾道題,就會比較容易理解:Nobel Quiz

3. 分類排序的第幾條

適用範圍:查詢各分類中最大、最小、最前、最後,排序中第幾條這些問題

方法:關聯子查詢配合排序,以及LIMIT 1 (限制1條)、OFFSET(偏移數量來確定第幾條)

例子:SELECT within SELECT Tutorial

代碼:

SELECT continent, name, area FROM world a

WHERE area = (SELECT area FROM world b

WHERE a.continent =b.continent

ORDER BY area DESC LIMIT 1)

代碼:

SELECT continent,name FROM world a

WHERE name = (SELECT name FROM world b

WHERE a.continent = b.continent

ORDER BY name

LIMIT 1)

另外,對於分類中的最大最小值,還可以有兩種方法解決:

一、 通過在子查詢中查詢MAX()和MIN()來解決

這種方法還適用於在子查詢中查詢COUNT(),SUM(),AVG()

相關例題的解釋很多,不舉例了。

二、通過ALL(子查詢)結合比較謂詞來解決

相關例題請見4

4. ALL的用法

ALL:父查詢中的結果集大於子查詢中每一個結果集中的值,則為真

例子:SELECT within SELECT Tutorial

代碼:

SELECT name, continent, population FROM world a

WHERE 25000000>= ALL(SELECT population FROM world b

WHERE a.continent = b.continent)

代碼:

SELECT name, continent

FROM world a

WHERE population/3 >= ALL( SELECT population FROM world b

WHERE a.name != b.name AND a.continent = b.continent)

補充:

類似用法的還有ANY,SOME,區別是:

ANY:父查詢中的結果集大於子查詢中任意一個結果集中的值,則為真

SOME的作用和ANY一樣。

5. 三表聯結

兩種方法:1. 兩個兩個進行聯結;2. 三個一起聯結 (相當於CROSS JOIN)

例子:

代碼:

SELECT title, name

FROM movie JOIN casting ON movie.id= movieid

JOIN actor ON actorid = actor.id

WHERE yr = 1962 AND ord=1;

代碼:

SELECT title, name

FROM movie, actor, casting

WHERE movie.id = movieid AND actor.id = actorid

AND yr = 1962 AND ord=1;

推薦閱讀:

西線學院每日學習分享----SQL數據分析常用語句
滴滴出行分析師十條
Hello world! 數據分析我來了
數據分析啟程----實踐計劃
雨沐田:數據分析之Excel數據導入方法

TAG:SQL | 數據分析 |