본문 바로가기

공부

[SolveSQL] ORDER BY ASC, DESC (오름차순, 내림차순 정렬) 최고의 근무일을 찾아라

반응형


ORDER BY는 SELECT 문에서 나온 결과를 정렬할 때 사용한다.
- 오름차순 (Ascending)
- 내림차순 (Descending)
이 두가지가 존재하고, 각각의 앞자리를 따서 ASC(오름차순), DESC(내림차순)이라고 명시합니다.

만약에 SQL 값에서 숫자가 아닌 문자일시, 알파벳 순으로 정렬합니다.

- 오름차순 : 작은 값에서 큰 값으로 (1, 2, 3, 4) (A, B, C)
- 내림차순 : 큰 값에서 작은 값으로 (1, 2, 3, 4) (A, B, C)

SELECT [id, name]
FROM [table_name]
ORDER BY [id]


기본값은 오름차순으로 위의 SQL 코드처럼 따로 명시를 하지 않을 경우 (오름차순)으로 정렬되고,
내림차순의 정렬을 원할 경우에는 (내림차순)을 명시하면 된다.

ORDER BY 값을 여러 개 주면, 나열된 순서대로(왼쪽부터) 정렬을 시작한다.

SELECT [id, name]
FROM [table_name]
ORDER BY [id] ASC, [name] DESC



아래는 MySQL 문제이다.

최고의 근무일을 찾아라 - 난이도 1

팁을 많이 받을 수 있는 요일-
- Group by 로 요일에 따라서 그룹을 묶어준다.
요일 별 팁 총액
- sum 함수를 사용
팁 총액은 소수점 셋째자리에서 반올림
- round(값, 3) 사용
팁이 가장 많았던 요일만
- max() 함수를 사용

처음에 max(sum()) 형식으로 사용하려고 했으나, 실패

처음에 접근법은 해당 열에서 가장 큰 값을 찾아서, 그 값만 출력하는 이중 쿼리문을 생각했는데,
더 간단하게 하는 방법이 있었다.

해결법

아래와 같이 순서대로 정렬을 시킨 후,
1개만 출력한다고 제한을 걸어두면 되는 것이었다.

SELECT
  day,
  ROUND(SUM(tip), 3) AS tip_daily
FROM
  tips
GROUP BY
  day
HAVING
  SUM(tip)
ORDER BY
  tip_daily DESC
limit
  1




간단하게 보는 능력을 배워야할 것 같다.


플러스로 뭔가 파생되어있는 문제도 풀었다.
이거는 거의 몇분만에 풀었다.
아래도 그냥 같이 풀면 좋을듯

레스토랑 웨이터 팁 분석 - 난이도 2

select
  day,
  time,
  round(avg(tip), 2) as avg_tip,
  round(avg(size), 2) as avg_size
from
  tips
GROUP by
  time,
  day
HAVING
  avg(tip)
order by day, time



참고한 사이트
- max(sum()) 해결법 : https://stackoverflow.com/questions/19671763/how-to-use-sql-maxsum-function
- SQL 오름차순 내림차순 정리 : https://ejxousiva.tistory.com/10

반응형