mysql에서 어떻게 결과값을 pivoting 할까를 찾다가 group_concat 함수를 보게 되었습니다. 문서에서 설명하는 것과 같이 집계 함수이니, group by는 들어갈 테고요. 집계된 결과를 concat 하는 함수입니다. 예제를 하나 보겠습니다. titles 테이블에 있는 레코드들을 모두 불러와 봅시다. 우리는 여기서 어떤 일을 할 거냐면요. title, 즉 직급별로 어떤 사람이 있는지를 concat 해서 보여줄 거에요. 예를 들어, Staff이면 집계된 결과가 10002, 10005, ... 이런 식으로 나와야 합니다. 그러기 위해서는 title 별로 집계를 해야 합니다. 따라서 group by title이 들어가야 됩니다. 그런데, 어떤 값들을 concat 할 건가요? 근로자의 번호. 즉 ..
mysql 검색 결과
프로그래머스나 해커랭크에서 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년간 계약한 데이터가 있다고 해 봅시다. 그러면, 회사에 다니는 동안의 평균 연봉도 있을 겁니다. 이..
jdbc를 사용할 때, connection을 close 해 주지 않으면 어떤 일이 벌어질까요? 파일을 열어놓고 close를 안 하면 fd가 낭비되는 것처럼 connection이 계속 쌓이다가, connection이 고갈될 겁니다. jdbc mysql과 연동했을 때, connection을 해제를 해 주지 않았을 때, mysql server에서는 어떤 일이 일어나는지 변수값과 status를 보면서 알아보겠습니다. 먼저, show variables like '%con%'을 쳐 보겠습니다. 이것은 variable name에 con이 들어가는 것을 모두 찾습니다. 이 중에 max_connections가 보이는데요. 이 값은 문서에 따르면, 허용하는 클라이언트 연결 수의 최댓값을 의미합니다. 그리고 이 문서를 보면..
제가 개최한 코테 문제 중에서는, 시각 처리 문제가 있었습니다. 생각보다 많이 쓰일 법 하니 알아두면 좋을 듯 해요. 특정 날짜로부터 1일 전, 1달 전, 1년 전, 1년 후의 날짜를 구해야 합니다. 어떻게 해야 할까요? YYYY-MM-DD로 표현되는 date를 어떻게 연산하는지 알아봅시다. mysql에 있는 DATE_ADD와 DATE_SUB를 알아볼 건데요. 첫 번째 인자에는 date가 들어갑니다. 두 번째 기간에는 INTERVAL이 들어가는데요. 예제를 보도록 하겠습니다. 위 예제는 2004-02-29부터 1 YEAR만큼 지난 날짜를 출력합니다. 뭔가 이상하게 나오는데요. 365일을 기준으로 해서 그런 건지는 아리송 하네요. 윤년이 낀 경우는 조심해야 합니다. 1 DAY만큼 지난 날짜를 출력하려면, ..
최근댓글