생활코딩에 올라왔던 질문을 해결해 보도록 하겠습니다. google 코드 잼 등을 보면, 라운드들이 있어요. 그 중, 1차 라운드, 2차 라운드, 3차 라운드가 있어서, 이들 중 한 라운드에 통과하면, 다음 라운드에 진출한다는 규칙도 있습니다. 이런 것은 SQL로 어떻게 처리하면 좋을까요? test table은 아래와 같이 주어져 있습니다. 여기서 name은 유저 이름, _check는 각 시험에 통과했는지를 나타냅니다. 여기서 _check는 'Y'나 'N'만 나올 수 있습니다. null 값은 허용이 되지 않는다고 해 봅시다. 어떠한 유저가 x차 라운드 중 최소한 하나 이상 통과했다면, 통과 여부를 'Y'로, 아니면 'N'으로 표기하고 싶습니다. 다시 조건을 보면, 'Y'가 하나라도 있으면, 통과라고 했습니..
코딩/Sql 검색 결과
월별로 주문 횟수를 출력하세요. 혹은 요일별로 주문 횟수를 출력하세요. 정도는 많이 나오는 쿼리 중 하나입니다. 오늘은 이 중, 요일별로 주문 횟수를 출력하는 방법을 알아보도록 하겠습니다. sakila 데이터 베이스에는 rental 테이블이 있습니다. 오늘은 그것을 가지고 놀아보겠습니다. 먼저, 두 함수를 보도록 하겠습니다. date를 넘겨주면, dayofweek는 수를, dayname은 요일 이름을 돌려줍니다. 예를 들어서, date가 '2020-03-20'이라고 한다면, 후자의 리턴 값은 'Friday'가 됩니다. 문제는 dayofweek가 리턴하는 정수 값입니다. 위 표는 해당 date가 무슨 요일 (오른쪽) 일 때, 어떤 값을 리턴하는지 (왼쪽) 나타낸 것입니다. 만약에, '2020-03-20'이..
mysql은 8버전 부터였나요? rank 함수를 쓸 수 있습니다. 이런 꿀 같은 함수를 외워서 쓰지를 못하다니. 반성해야 겠습니다. 이것은 뒤에 over절이 같이 따라나옵니다. 이 안에 들어갈 내용을 생각해 봅시다. 랭킹을 매길 때나, 정렬을 할 때에는 무엇이 중요한가요? 바로, 기준입니다. 예를 들어서, 인구수 기준으로 내림차순으로 랭킹을 매기고 싶다던지, 점수 내림차순으로 매기고 싶다던지, 그런 것들입니다. 이들은, order by 구문으로 처리할 수 있습니다. world 데이터 베이스에는, city 테이블이 있습니다. 이것을 가지고 놀아보겠습니다. 예를 들어봅시다. 위 쿼리는, city 테이블에서 Population 내림차순으로 랭크를 매기라는 의미입니다. 그러면 정확하게 랭킹값이 Populatio..
오늘은 중복된 결과를 제거하기 위해 mysql에서 많이 써먹는 distinct 절에 대해 알아보도록 하겠습니다. world에서, country 테이블을 생각해 봅시다. 나라는, Continent라는 컬럼도 포함할 겁니다. 예를 들어, 아시아, 유럽, 북아메리가 등등. country에서, Continent만 뽑아 봅시다. 그러면 쿼리는 위와 같이 작성하면 됩니다. 그런데, 이것은 country에 있는 레코드를 모두 뽑아냅니다. 물론, 속성은 Continent만 뽑아내겠지만요. 예를 들어서, 영국과 프랑스가 있다면, "Europe" 이라는 것은 2번 이상 뽑힐 겁니다. 그런가요? 저는, country 테이블에 있는 나라들이 속해있는 대륙의 갯수만 알고 싶습니다. 즉, Europe이 2번 나온다면 1번만 세야..
나중에 설명할 인덱스를 소개하기 전에, Hash와 균형 트리의 차이점을 짚고 넘어가는 게 나을 듯 싶습니다. 사실, 나중에 인덱스에 대해서 할 때, 이런 이야기는 상당히 많이 나오기 때문입니다. 범위 검색과 동등 검색. 맞나 잘 모르겠어요. 일치 검색인지. 하여튼, Tree 기반 인덱스와 Hash 기반 인덱스가 나오는데요. 이에 대해서 지금은 잘 모르셔도 괜찮습니다. 대신에, 균형 Tree 기반으로 찾는 것과, Hash 기반으로 찾는 것에 대해서 다루고 넘어가도록 하겠습니다. 자료구조에 대해서 복습도 할 겸. 사실 왜 그렇게 하는지 디스크와 메모리에 대한 차이도 이해해야 겠지만, 여기서 길게 언급하면 글이 매우 길어질 듯 싶으니 언급하진 않겠습니다. 먼저, Hash 기반 자료구조는 = 검색에 특화된 구조..
최근댓글