Last active
April 12, 2021 01:11
-
-
Save youchen/d8ce1c70d23681027606563141a8b8d3 to your computer and use it in GitHub Desktop.
solution to HackerRank sql exercise
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Basic Select */ | |
-- Revising the Select Query I | |
SELECT | |
* | |
FROM | |
CITY | |
WHERE | |
POPULATION > 100000 | |
AND COUNTRYCODE = 'USA' | |
-- Revising the Select Query II | |
SELECT | |
NAME | |
FROM | |
CITY | |
WHERE | |
POPULATION > 120000 | |
AND COUNTRYCODE = 'USA' | |
-- Select All | |
SELECT | |
* | |
FROM | |
CITY | |
-- Select By ID | |
SELECT | |
* | |
FROM | |
CITY | |
WHERE | |
ID = 1661 | |
-- Japanese Cities' Attributes | |
SELECT | |
* | |
FROM | |
CITY | |
WHERE | |
COUNTRYCODE = 'JPN' | |
-- Weather Observation Station 1 | |
SELECT | |
CITY, STATE | |
FROM | |
STATION | |
-- Weather Observation Station 3 | |
SELECT | |
distinct CITY | |
FROM | |
STATION | |
WHERE | |
(ID % 2) = 0 | |
-- Weather Observation Station 4 | |
SELECT | |
COUNT(CITY) - COUNT(DISTINCT CITY) AS DIFF | |
FROM | |
STATION | |
-- Weather Observation Station 5 | |
(SELECT | |
CITY, LENGTH(CITY) | |
FROM STATION | |
ORDER BY LENGTH(CITY), CITY LIMIT 1) | |
UNION | |
(SELECT | |
CITY, LENGTH(CITY) | |
FROM STATION | |
ORDER BY LENGTH(CITY) DESC, CITY LIMIT 1) | |
-- Weather Observation Station 6 | |
SELECT | |
CITY | |
FROM | |
STATION | |
WHERE | |
REGEXP_LIKE(CITY, '^a|^e|^i|^o|^u') | |
-- Weather Observation Station 7 | |
SELECT | |
DISTINCT CITY | |
FROM | |
STATION | |
WHERE | |
REGEXP_LIKE(CITY, 'a$|e$|i$|o$|u$') | |
-- Weather Observation Station 8 | |
SELECT | |
DISTINCT CITY | |
FROM | |
STATION | |
WHERE | |
REGEXP_LIKE(CITY, '^[aeiou].*[aeiou]$', 'i') | |
-- Weather Observation Station 9 | |
SELECT | |
DISTINCT CITY | |
FROM | |
STATION | |
WHERE | |
REGEXP_LIKE(CITY, '^[^aeiou]', 'i') | |
-- Weather Observation Station 10 | |
SELECT | |
DISTINCT CITY | |
FROM | |
STATION | |
WHERE | |
REGEXP_LIKE(CITY, '[^aeiou]$', 'i') | |
-- Weather Observation Station 11 | |
SELECT | |
DISTINCT CITY | |
FROM | |
STATION | |
WHERE | |
REGEXP_LIKE(CITY, '^[^aeiou]|[^aeiou]$', 'i') | |
-- Weather Observation Station 12 | |
SELECT | |
DISTINCT CITY | |
FROM | |
STATION | |
WHERE | |
REGEXP_LIKE(CITY, '^[^aeiou].*[^aeiou]$', 'i') | |
-- Higher Than 75 Marks | |
SELECT | |
NAME | |
FROM | |
STUDENTS | |
WHERE | |
MARKS > 75 | |
ORDER BY RIGHT(NAME, 3), ID | |
-- Employee Names | |
SELECT | |
NAME | |
FROM | |
EMPLOYEE | |
ORDER BY NAME | |
-- Employee Salaries | |
SELECT | |
NAME | |
FROM | |
EMPLOYEE | |
WHERE | |
SALARY > 2000 | |
AND MONTHS < 10 | |
ORDER BY EMPLOYEE_ID | |
/* Advanced Select */ | |
-- Type of Triangle | |
SELECT | |
CASE | |
WHEN ( | |
A + B <= C OR A + C <= B OR B + C <= A | |
) THEN 'Not A Triangle' | |
WHEN (A = B AND B = C AND A = C) THEN 'Equilateral' | |
WHEN ( | |
(A = B AND A != C) | |
OR (A = C AND A != B) | |
OR (B = C AND A != B) | |
) THEN 'Isosceles' | |
WHEN (A != B AND B != C AND A != C) THEN 'Scalene' | |
END | |
FROM | |
TRIANGLES | |
-- The PADS | |
SELECT | |
CONCAT(NAME, '(', LEFT(OCCUPATION, 1), ')') | |
FROM | |
OCCUPATIONS | |
ORDER BY NAME; | |
SELECT | |
CONCAT('There are a total of ', COUNT(OCCUPATION), ' ', LOWER(OCCUPATION), 's.') | |
FROM | |
OCCUPATIONS | |
GROUP BY OCCUPATION | |
ORDER BY COUNT(OCCUPATION), OCCUPATION; | |
-- Occupations | |
-- https://my.oschina.net/u/4600992/blog/4459062 | |
WITH t AS ( | |
SELECT | |
OCCUPATION, | |
ROW_NUMBER() OVER ( | |
PARTITION BY OCCUPATION | |
ORDER BY NAME | |
) AS RN, | |
NAME | |
FROM | |
OCCUPATIONS | |
) | |
SELECT | |
MIN(IF(OCCUPATION = 'Doctor', name, NULL)) AS Doctor, | |
MIN(IF(OCCUPATION = 'Professor', name, NULL)) AS Professor, | |
MIN(IF(OCCUPATION = 'Singer', name, NULL)) AS Singer, | |
MIN(IF(OCCUPATION = 'Actor', name, NULL)) AS Actor | |
FROM | |
t | |
GROUP BY RN | |
-- Binary Tree Nodes | |
SELECT | |
N, | |
CASE | |
WHEN P IS NULL THEN 'Root' | |
WHEN N in (SELECT P FROM BST) THEN 'Inner' | |
ELSE 'Leaf' | |
END | |
FROM | |
BST | |
ORDER BY N | |
-- New Companies | |
SELECT employee.company_code, | |
company.founder, | |
COUNT(DISTINCT employee.lead_manager_code), | |
COUNT(DISTINCT employee.senior_manager_code), | |
COUNT(DISTINCT employee.manager_code), | |
COUNT(DISTINCT employee.employee_code) | |
FROM employee | |
INNER JOIN company | |
ON employee.company_code = company.company_code | |
GROUP BY employee.company_code, | |
company.founder | |
ORDER BY employee.company_code | |
/* Aggregations */ | |
-- Revising Aggregations - The Count Function | |
SELECT | |
COUNT(ID) | |
FROM | |
CITY | |
WHERE | |
POPULATION > 100000 | |
-- Revising Aggregations - The Sum Function | |
SELECT | |
SUM(POPULATION) | |
FROM | |
CITY | |
WHERE | |
DISTRICT = 'California' | |
-- Revising Aggregations - Averages | |
SELECT | |
AVG(POPULATION) | |
FROM | |
CITY | |
WHERE | |
DISTRICT = 'California' | |
-- Average Population | |
SELECT | |
ROUND(AVG(POPULATION), 0) | |
FROM | |
CITY | |
-- Japan Population | |
SELECT | |
SUM(POPULATION) | |
FROM | |
CITY | |
WHERE | |
COUNTRYCODE = 'JPN' | |
-- Population Density Difference | |
SELECT | |
MAX(POPULATION) - MIN(POPULATION) | |
FROM | |
CITY | |
-- The Blunder | |
SELECT | |
CEIL(AVG(SALARY) - AVG(REPLACE(SALARY, '0', ''))) | |
FROM | |
EMPLOYEES | |
-- Top Earners | |
SELECT EMPLOYEE_WITH_MAX_SALARY.earning, | |
Count(*) | |
FROM (SELECT NAME, | |
salary * months AS EARNING | |
FROM employee | |
WHERE salary * months = (SELECT Max(TOTAL_SALARY.earning) | |
FROM (SELECT months * salary AS EARNING | |
FROM employee) AS TOTAL_SALARY) | |
) AS EMPLOYEE_WITH_MAX_SALARY | |
GROUP BY EMPLOYEE_WITH_MAX_SALARY.earning | |
-- Weather Observation Station 2 | |
SELECT | |
ROUND(SUM(LAT_N), 2) AS lat, | |
ROUND(SUM(LONG_W), 2) AS lon | |
FROM | |
STATION | |
-- Weather Observation Station 13 | |
SELECT | |
ROUND(SUM(LAT_N), 4) | |
FROM | |
STATION | |
WHERE | |
LAT_N > 38.7880 AND LAT_N < 137.2345 | |
-- Weather Observation Station 14 | |
SELECT | |
ROUND(MAX(LAT_N), 4) | |
FROM | |
STATION | |
WHERE | |
LAT_N < 137.2345 | |
-- Weather Observation Station 15 | |
SELECT | |
ROUND(LONG_W, 4) | |
FROM | |
STATION | |
WHERE | |
LAT_N = ( | |
SELECT | |
MAX(LAT_N) | |
FROM | |
STATION | |
WHERE | |
LAT_N < 137.2345 | |
) | |
-- Weather Observation Station 16 | |
SELECT | |
ROUND(MIN(LAT_N), 4) | |
FROM | |
STATION | |
WHERE | |
LAT_N > 38.7780 | |
-- Weather Observation Station 17 | |
SELECT | |
ROUND(LONG_W, 4) | |
FROM | |
STATION | |
WHERE | |
LAT_N = | |
(SELECT | |
MIN(T.LAT_N) | |
FROM | |
( | |
SELECT | |
LAT_N | |
FROM | |
STATION | |
WHERE | |
LAT_N > 38.7880 | |
) AS T | |
) | |
-- Weather Observation Station 18 | |
SELECT | |
ROUND(ABS(MIN(LAT_N) - MAX(LAT_N)) + ABS(MIN(LONG_W) - MAX(LONG_W)) ,4) | |
FROM | |
STATION | |
-- Weather Observation Station 19 | |
SELECT | |
ROUND( | |
SQRT( | |
POWER((MIN(LAT_N) - MAX(LAT_N)), 2) + POWER((MIN(LONG_W) - MAX(LONG_W)), 2) | |
), 4) | |
FROM | |
STATION |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment