반응형

삼각형의 세 변의 길이 A, B, C가 기록되어있는 테이블 TRIANGLE이 주어졌을 때, 각 삼각형의 종류를 4가지로 분류하는 문제입니다.(정삼각형/이등변삼각형/그냥 삼각형/삼각형이 아니다)

 

https://www.hackerrank.com/challenges/what-type-of-triangle/problem

 

Type of Triangle | HackerRank

Query a triangle's type based on its side lengths.

www.hackerrank.com

MySQL의 CASE문을 배웠습니다. 풀이를 보면 쉽게 이해가 되실 겁니다.

(CASE - WHEN - THEN - ELSE - END 로 구성됩니다.)


SELECT 
CASE 
WHEN A = B AND B = C THEN 'Equilateral' 
WHEN A >=B+C OR B>=A+C OR C>=A+B THEN 'Not A Triangle'
WHEN A = B OR A = C OR B = C THEN 'Isosceles' 
ELSE 'Scalene' END
FROM TRIANGLES;


 

반응형

'DB > SQL' 카테고리의 다른 글

Hackerrank - SQL  (0) 2020.03.17
Hackerrank[SQL] - Weather Observation Station 6  (0) 2020.03.10
Hackerrank[SQL] - Weather Observation Station 5  (1) 2020.03.06
Hackerrank[SQL] - Weather Observation Station 4  (0) 2020.03.06
반응형

STUDENT라는 테이블의 Name의 오른쪽 세자리를 기준으로 정렬하는 문제입니다. 엑셀같군요.

 

SELECT NAME

FROM STUDENTS S

WHERE S.Marks > 75 

ORDER BY RIGHT(S.NAME, 3), ID;

반응형
반응형

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

 

Weather Observation Station 6 | HackerRank

Query a list of CITY names beginning with vowels (a, e, i, o, u).

www.hackerrank.com

동일한 테이블 STATION에서 CITY NAME이 모음(a,e,i,o,u)로 시작하는 것들을 찾아내는 문제입니다.

 

SELECT CITY

FROM STATION S

WHERE S.CITY REGEXP '^[aeiou]';

 

와 같은 형식으로 찾아낼 수 있습니다. 정규표현식은 다 비슷비슷한가보군요.

비슷한 문제가 두 문제 더 있었습니다.

 

1) aeiou로 끝나는 CITY NAME을 찾아라

SELECT CITY

FROM STATION S

WHERE S.CITY REGEXP '[aeiou]$';

 

→ 정규표현식에서 $는 끝을 의미합니다. 따라서 '[aeiou]$'는 aeiou 중 하나로 끝나는 문자열을 의미하게 됩니다.

 

2) aeiou로 시작하고, aeiou로 끝나는 CITY NAME을 찾아라.

 

SELECT CITY

FROM STATION S

WHERE S.CITY REGEXP '^[aeiou].*[aeiou]$';

 

→ .은 문자열 한개를 의미하고, *는 앞의 패턴이 0번 이상 반복됨을 의미합니다. 즉 .*는 0개 이상의 문자가 반복된다는 뜻이죠. 즉, "^[aeiou]" aeiou 중 하나로 시작하며, ".*" 중간에 0개 이상의 문자를 가지고, "[aeiou]$' aeiou로 끝나는 CITY NAME을 찾아라. 라는 뜻입니다.

 

 

** 정규표현식 **

 

1) . : 문자열 1개

2) * : 별표 앞의 패턴이 0회 이상 반복

  ex) .* : 문자가 0회 이상 반복

3) ^ : 시작

4) $ : 끝

5) [문자열] : 괄호 안에 있는 문자열에 대하여 ~

  ex) ^[aeiou] : aeiou 중 하나로 시작

6) [^문자열] : 괄호 안에 있는 문자열을 제외하고 ~ 

7) {n} : n회 반복

8) {m, n} : 최소 m회, 최대 n회 반복

 

반응형

'DB > SQL' 카테고리의 다른 글

Hackerrank - Type of Triangle  (0) 2020.03.24
Hackerrank - SQL  (0) 2020.03.17
Hackerrank[SQL] - Weather Observation Station 5  (1) 2020.03.06
Hackerrank[SQL] - Weather Observation Station 4  (0) 2020.03.06
반응형

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

 

Weather Observation Station 5 | HackerRank

Write a query to print the shortest and longest length city name along with the length of the city names.

www.hackerrank.com

이번 문제는 MySQL을 통해 아래와 같은 STATION이라는 테이블에서, CITI name(Column명 CITY)이 가장 짧은 것과 긴 것을 출력하는 것입니다. 이때 출력 시 주의할 점은, 같은 길이의 CITY name을 가진 것들에 대해서는 알파벳 순서가 가장 빠른 것을 출력하면 됩니다.

 

Output : (CITY name), (Length of the CITY name)

 

 

SELECT , CHAR_LENGTH(), ORDER BY (DESC, ASC)를 활용하여 문제를 해결하였습니다.

 

1. 방법

  1) CITY Column의 길이 중 가장 가장 짧은 것, 긴 것을 뽑는다.

     SELECT CITY, MIN(CHAR_LENGTH(CITY)) FROM STATION;

     SELECT CITY, MAX(CHAR_LENGTH(CITY)) FROM STATION;

 

       문자열의 길이를 출력하는 방식은 2가지가 있습니다.

     * LENGTH() : BYTE 수를 기준으로 문자열의 길이를 출력합니다.

     * CHAR_LENGTH() : 글자 수를 기준으로 문자열의 길이를 출력합니다.

 

  2) 같은 길이를 가진 문자열이 여러 개 있을 수 있으므로, 알파벳 순으로 정렬하여 출력한다.

     SELECT CITY, CHAR_LENGTH(CITY)
     FROM STATION
     ORDER BY 2 ASC,1 LIMIT 1;
     SELECT CITY, CHAR_LENGTH(CITY)
     FROM STATION
     ORDER BY 2 DESC,1 DESC LIMIT 1;

 

       정렬은 ORDER BY로 진행할 수 있습니다. ASC는 오름차순, DESC는 내림차순입니다. 길이가 가장 짧은 것은 CHAR_LENGTH(CITY)를 오름차순으로 정렬한 뒤 1개만 가져오면 됩니다. 이 때 ORDER BY 뒤에 CHAR_LENGTH, CITY 순으로 입력하면, 우선순위를 가지고 정렬할 수 있습니다. 

반응형

'DB > SQL' 카테고리의 다른 글

Hackerrank - Type of Triangle  (0) 2020.03.24
Hackerrank - SQL  (0) 2020.03.17
Hackerrank[SQL] - Weather Observation Station 6  (0) 2020.03.10
Hackerrank[SQL] - Weather Observation Station 4  (0) 2020.03.06
반응형

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

 

Weather Observation Station 4 | HackerRank

Find the number of duplicate CITY names in STATION.

www.hackerrank.com

문제 : 아래와 같이 구성된 Station 테이블에서 (전체 데이터 수) - (중복되지 않은 CITY Name 데이터 수) 를 구하는 문제이다.

방법 : 

  1. (전체 데이터 수) 저장

  SET @A = (SELECT COUNT(*) FROM STATION);

 

  2. (중복되지 않은 CITY Name 데이터 수) 저장

  SET @B = (SELECT COUNT(DISTINCT(CITY)) FROM STATION);

 

  3. 빼고 출력

  SELECT @A-@B;

 

MySQL에서 변수 저장하는 방식(@var = num;)을 알게 되었습니다.

반응형

'DB > SQL' 카테고리의 다른 글

Hackerrank - Type of Triangle  (0) 2020.03.24
Hackerrank - SQL  (0) 2020.03.17
Hackerrank[SQL] - Weather Observation Station 6  (0) 2020.03.10
Hackerrank[SQL] - Weather Observation Station 5  (1) 2020.03.06

+ Recent posts