mysql에서 어떻게 결과값을 pivoting 할까를 찾다가 group_concat 함수를 보게 되었습니다. 문서에서 설명하는 것과 같이 집계 함수이니, group by는 들어갈 테고요. 집계된 결과를 concat 하는 함수입니다. 예제를 하나 보겠습니다. titles 테이블에 있는 레코드들을 모두 불러와 봅시다. 우리는 여기서 어떤 일을 할 거냐면요. title, 즉 직급별로 어떤 사람이 있는지를 concat 해서 보여줄 거에요. 예를 들어, Staff이면 집계된 결과가 10002, 10005, ... 이런 식으로 나와야 합니다. 그러기 위해서는 title 별로 집계를 해야 합니다. 따라서 group by title이 들어가야 됩니다. 그런데, 어떤 값들을 concat 할 건가요? 근로자의 번호. 즉 ..
코딩/Sql 검색 결과
제 토이 프로젝트는 postgresql 12.9를 사용하고 있어요. 특정 api를 호출했을 때 쿼리가 실행이 될 텐데요. 쿼리가 실행될 때 어떤 lock이 걸리는지 간단하게 보기로 하였습니다. 데드락이 생길 수 있을까? 라는 의문이 들었기 때문입니다. 만약에 생긴다면 적당한 방법으로 회피를 해야 하기도 하고요. 그러면 어떤 식으로 lock이 걸리는 지 알아야 할 겁니다. 데이터가 그리 크지 않아서, 쿼리 수행이 매우 순식간에 끝나게 됩니다. 그래서, 쿼리가 실행되는 도중에 잠깐 sleep을 시켜야 됩니다. 이를 위해서 pg_sleep 함수를 이용하였습니다. 사용법은 간단합니다. 안에 몇 초 동안 sleep를 시킬 건지 넣기만 하면 됩니다. 1 row(s) fetched가 있는데요. 옆에 5.89초가 있습..
프로그래머스나 해커랭크에서 sql 문제를 풀다 보면 with 문을 쓰면 더 간결해 지겠구나. 라는 생각이 들 때가 있어요. 이 with절이 그냥 단순하게 실행 결과를 임시로 저장해 두고 쓴다. 정도로만 알고 있었어요. 그런데, recursive하게 써 먹을 수도 있었어요. 꽤 오랜 시간 헤멘 끝에 문서를 보고 약간이나마 이해를 할 수 있게 되었는데요. 이래서 영어 공부가 필요한가 봅니다. 예제 문제를 보면서 같이 쿼리를 작성해 봅시다. 먼저, test 테이블에는 id와 par가 저장되어 있어요. par가 -1인 경우에는 부모가 없다는 뜻이고요. par가 -1이 아닌 0보다 큰 정수라면, 부모가 있다는 뜻입니다. 예를 들어, id가 6인 노드의 부모는 4임을 의미합니다. 이 데이터는 포레스트 형식을 만족해..
sql에서 with 절은 해당 쿼리 내에서 임시 결과를 정의하고 쓸 때 유용하게 사용됩니다. sql 코딩 테스트에서 꽤 어려운 문제가 나왔을 때, 잘 써먹으면 유용하지 않을까 싶어요. 사용 방법 보다는 문제 상황을 하나 정의하는 게 좋을 듯 싶네요. 그러면서 이해를 해 보도록 하겠습니다. 먼저 salaries를 보겠습니다. 이 테이블에는 1년마다 계약을 할 때 각 일꾼들의 연봉을 나타냅니다. 테이블을 조회해 보겠습니다. 그러면, 10001번 일꾼에 대해서, 각각 60117, 62102, 66074, ... 등의 근로 계약을 했음을 볼 수 있어요. 연봉 하니까 무슨 생각이 드나요? 해당 테이블에 근로자가 n년간 계약한 데이터가 있다고 해 봅시다. 그러면, 회사에 다니는 동안의 평균 연봉도 있을 겁니다. 이..
안녕하세요. 이번 시간에는 mysql의 substring_index 함수에 대해서 배워볼 거에요. 문서를 보시면 간단하게 이해할 수 있으실 듯 합니다. 이것이 단독으로 쓰일지는 모르겠는데요. 구분자를 가지고 token을 떨어트릴 때 이용할 수 있습니다. 사용 용례를 간단하게 봅시다. target string은 'a|bb|ccc'라고 해 봅시다. 얼핏 봐도 '|'을 구분자로 해서 필드 3개짜리인 데이터가 들어 있는데요. 2번째 인자에 '|'을 넣고 3번째 인자에 2를 넣어 봅시다. 그러면 놀랍게도 'a|bb'가 떨어지게 되는데요. 2번째 '|'가 나오기 직전까지 잘라버렸음을 알 수 있어요. 3번째 인자에 음수 값이 들어갈 수도 있는데요. 이 경우, 거꾸로 탐색해 버리게 됩니다. 예를 들어 보겠습니다. 1번..
최근댓글