Skip to content

Instantly share code, notes, and snippets.

@youchen
Last active April 12, 2021 01:11
Show Gist options
  • Save youchen/d8ce1c70d23681027606563141a8b8d3 to your computer and use it in GitHub Desktop.
Save youchen/d8ce1c70d23681027606563141a8b8d3 to your computer and use it in GitHub Desktop.
solution to HackerRank sql exercise
/* 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