생활코딩에 올라왔던 질문을 해결해 보도록 하겠습니다. google 코드 잼 등을 보면, 라운드들이 있어요. 그 중, 1차 라운드, 2차 라운드, 3차 라운드가 있어서, 이들 중 한 라운드에 통과하면, 다음 라운드에 진출한다는 규칙도 있습니다. 이런 것은 SQL로 어떻게 처리하면 좋을까요? test table은 아래와 같이 주어져 있습니다. 여기서 name은 유저 이름, _check는 각 시험에 통과했는지를 나타냅니다. 여기서 _check는 'Y'나 'N'만 나올 수 있습니다. null 값은 허용이 되지 않는다고 해 봅시다. 어떠한 유저가 x차 라운드 중 최소한 하나 이상 통과했다면, 통과 여부를 'Y'로, 아니면 'N'으로 표기하고 싶습니다. 다시 조건을 보면, 'Y'가 하나라도 있으면, 통과라고 했습니..
sql 검색 결과
mysql은 8버전 부터였나요? rank 함수를 쓸 수 있습니다. 이런 꿀 같은 함수를 외워서 쓰지를 못하다니. 반성해야 겠습니다. 이것은 뒤에 over절이 같이 따라나옵니다. 이 안에 들어갈 내용을 생각해 봅시다. 랭킹을 매길 때나, 정렬을 할 때에는 무엇이 중요한가요? 바로, 기준입니다. 예를 들어서, 인구수 기준으로 내림차순으로 랭킹을 매기고 싶다던지, 점수 내림차순으로 매기고 싶다던지, 그런 것들입니다. 이들은, order by 구문으로 처리할 수 있습니다. world 데이터 베이스에는, city 테이블이 있습니다. 이것을 가지고 놀아보겠습니다. 예를 들어봅시다. 위 쿼리는, city 테이블에서 Population 내림차순으로 랭크를 매기라는 의미입니다. 그러면 정확하게 랭킹값이 Populatio..
안녕하세요. chogahui05입니다. 오늘 해 볼 내용은 Alias, 그러니까 as 절입니다. 이는 이름이 긴 필드 이름이나, 긴 릴레이션 이름을 Query 문 내에서 다시 이름을 짓기 위해서 씁니다. 당연하게도 결과 relation에서, 이름이 다시 지어질 겁니다. A as B라고 하면, A를 B로 재명명한다는 뜻입니다. 예제를 보이는 것이 좀 더 좋겠네요. 먼저, school 데이터 베이스에서 student 테이블에 있는 내용들을 모두 뽑아와 보겠습니다. 테이블 내에는 ID, name, dept_name, tot_cred가 있습니다. 이 중 저는 ID와 dept_name을 뽑아올 건데요. dept_name은 d_name으로 재정의 하고 싶습니다. 그러면 어떻게 하면 좋을까요? 일단, select 절..
이번 시간에는 Self Join에 대해서 배워보도록 하겠습니다. 이것은, 자신과 자신을 Join하는 것을 의미하는데요. 예를 들어, 이런 경우를 생각해 볼 수 있어요. 도시 이름과 인구, 도시 ID가 저장된 테이블이 있다고 가정해 봅시다. 이 때, 해당 도시의 인구 랭킹을 구하고 싶습니다. 단, 동순위는 같은 번호로 처리합니다. 이 쿼리를 어떻게 처리하면 좋을까요? 물론 MYSQL도 지금은 rank 함수가 지원됩니다. 아마 8.0부터인가부터 말입니다. 실제로, 이것을 써 봤는데 무난하게 되었습니다. 하핫. 그런데 이 함수를 쓰는 게 불가능하다. 그러면 어떻게 하면 좋을까요? 몇 가지 방법이 있는데요. 그냥 성능 생각하지 않고 짤 수 있는 방법 중 하나는 self join을 하는 것입니다. 먼저, city..
저번 시간에, 자연 조인에 대해서 이야기 했습니다. 아직 보고 오지 않으셨다면 보고 오시는 것을 권장드립니다. 이것은, 속성이 같은 것을 JOIN 조건으로 삼습니다. 그렇기 때문에, 의도치 않은 결과가 나올 수 있어요. 저번 시간에 했으니, 복습을 한 번 해 봅시다. 돛단배 DB 교과서에는 대학교 DB 예제가 있습니다. classroom의 정보를 모두 봅시다. 그러면, capacity랑, room_number랑 building이 있습니다. 즉, 이 교실은 x명을 수용할 수 있고, room 번호가 y이고, building이 z입니다. 당연하게도, 교실 번호는 중복될 수 있습니다. 일례로 우리 학교도 경상관 101호랑, 정보 과학관 101호가 있습니다. 101호가 중복되어 있을 수 있습니다. 그리고 이것은 ..
최근댓글