[SQL] HankerRank SQL 練習紀錄_2021.05.31 updated

ChunJen Wang
jimmy-wang
Published in
5 min readMay 5, 2021

本篇記錄在HankerRank上刷SQL題目過程,並筆記一些有趣的題目。

為什麼使用HankerRank?

  1. 刷題目的過程不需要自己事先架設database,可以直接用HankerRank提供的資料庫進行練習。
  2. 支援MySQL/Oracle/MS SQL Server/DB2 等常見SQL語法。
  3. 有積分累積制度,依據累積分數設立星星等級(追求成就 V̷a̷n̷i̷t̷y̷)

STATION

Source: https://www.hackerrank.com/challenges/weather-observation-station-7/problem?

1 題目: Weather Observation Station 7

從STATION 表格中,Query出CITY名稱結尾包含vowels。
對應前一題(6)是找開頭含vowels。

#解法一 單純取結尾的一個字
#MySQL
SELECT DISTINCT CITY
FROM STATION
WHERE RIGHT(CITY,1) IN (‘a’,’i’,’e’,’o’,’u’);
#解法二 用到正規表達式
#MySQL
SELECT DISTINCT CITY
FROM STATION
WHERE CITY REGEXP '[aeiou]$'
#MS SQL Server作法
SELECT DISTINCT(CITY)
FROM STATION
WHERE CITY LIKE '%[aeiou]'

延伸: 若需要抓取開頭或結尾都包含vowels

#MySQL
select distinct city from station
where left(city,1) in (‘a’,’e’,’i’,’o’,’u’)
and right(city, 1) in (‘a’,’e’,’i’,’o’,’u’)

為什麼選這題?

這題除了可以做為正規表達式的敲門磚,也是認識不同語言中,需要注意語法不同,如上述解法中MySQL與MS SQL就使用到了不一樣的作法。

網路各說紛紜,但其實參考W3Schools中SQL Wildcards在這裡就很夠用。
或者參考GeeksforGeeks的MySQL正規表達式整理文。

https://www.hackerrank.com/challenges/weather-observation-station-16/problem?

2 題目: Weather Observation Station 16

從STATION 表格中,根據LAT_N>38.7780 Query出LAT_N最小值。
且小數取round 4位。

#解法 MySQL
select min(round(lat_n, 4))
from station
where lat_n > 38.7780

為什麼選這題?

這裡包含SQL中小數進位的function介紹,如同python也有不同的進位法,而SQL 主要就以TRUNCATE() , ROUND() 這兩種做法。

  • TRUNCATE() :針對輸入數值,對指定位數無條件捨去。
  • ROUND() :針對輸入數值,對指定位數的四捨五入。

更多ROUND運用方法,可以參考Microsoft 官方文件。或是SQL官方教學說明。

3–1 題目: Weather Observation Station 18

從STATION 表格中,計算最大(LAT_N, LONG_W)減去最小(LAT_N, LONG_W)的曼哈段距離

Source: 中文維基百科-曼哈頓距離
select round(
 max(lat_n)-min(lat_n) + max(long_w)-min(long_w)
,4)
from station

3–2 題目: Weather Observation Station 19

從STATION 表格中,計算最大最(LAT_N, LONG_W)的歐幾里得距離

Source: 中文維基百科-歐幾里得距離
# 最大x-最小x取平方 加上 最大y-最小y取平方
# 再將兩者加總後開根號
select round(
 sqrt(
  power(max(lat_n)-min(lat_n),2) +
  power(max(long_w)-min(long_w),2)
 )
,4)
from station

4 題目 Type of Triangle

TRIANGLES表格中,找出可以組成三角形者,
再依據三邊判斷為等邊三角形
[三邊等長]、等腰三角形[任兩邊等長]
(斜角)三角形
[三個邊長皆不相等]

三角形條件

  1. 任二邊長大於第三邊
  2. 任二邊長差的絕對值小於第三邊
Select
CASE
 when A+B>C and B+C>A and A+C>B then #三角形形成條件
  CASE
   when A=B and B=C Then ‘Equilateral’
   when A=B or A=C or B=C then ‘Isosceles’
  ELSE ‘Scalene’
 END
 ELSE ‘Not A Triangle’
END
from TRIANGLES
2021/05/31 updated

--

--

ChunJen Wang
jimmy-wang

嗨,歡迎你的到來,我目前在銀行擔任DS。過去曾做過銀行大型專案BA,也曾在轉職科技業DE中踢了鐵板,相信每一個人都有自己要走的路,而努力的過程,可以讓我們離心中理想更接近,如果我的文章能帶給你一些啟發與幫助,別忘了幫我在文章底下按下拍手~^^