프로그래밍/MySQL(4)
-
일일 누적되는 로그테이블에서 DAU수를 구하기 위한 SQL문
문제 : 일일 누적되는 로그테이블에서 DAU수를 구하기 위한 SQL문 사용자 마다 다양한 다수의 로그를 남깁니다. 중복되는 Playerid를 기준으로 Daily Active User를 구하고자 합니다. 다음과 같이 DISTINCT 명령어를 이용하면 생각보다 간단하게 원하는 결과값을 구할 수 있습니다. Uniq사용자들의 목록을 원한다면 count()를 제거해주시면 원하는 목록을 구할수 있습니다. 답 : SELECT count(DISTINCT playerid) FROM log_20161115 WHERE appid='FXE505'
2016.11.15 -
테이블에서 일정 개수 이후의 ROW를 모두 삭제하기
문제 : 특정 테이블에서 마지막에 저장되었던 ROW 5개를 제외한 나머지들은 등록된 날짜 순으로 정렬해서 삭제하기. (항상 최신 정보만을 유지 하기 위해서 사용됩니다.) SQL전문가는 아닙니다.하지만 DB관련 작업을 뛰엄뛰엄 오래동안 하다보니 필요한것은 최대한 배우면서 개발하고 있습니다.이번에도 저장파일을 서버에 등록하고 관리하는 기능을 추가하는 과정에서 Client는 무조건 서버에 저장을 하고 서버는 무한히 늘어나는 것을 방지하기 위해서 최근 저장된 파일 5개만 남기도록 하였습니다 그리고 그 이후로는 모두 삭제됩니다. 그리고 각 저장 파일들은 버전으로 관리됩니다. 동일한 버전 번호는 Update되고 새로운 버전 번호일 경우에는 Insert됩니다. DELETE table_savedata FROM tabl..
2016.09.12 -
내 등수 구하기(동점자 처리 포함)
랭킹정보를 관리하다보면 나의 등수만을 보여준다면 내점수 보다 높은 사용자들의 숫자만 알면됩니다.하지만 이건 Top20등의 상위 등수들만을 보여줄때 사용됩니다. 하지만 내 점수 위아래 +/-5 정도의 등수들을 보여주고자 할경우 특히 동점자들이 많은 경우 쿼리가 상당히 복잡해지네요. 일단 다음과 같은 쿼리로 한번에 내 등수(동점자들은 등록 날짜가 빠른 경우 상위 등수로)를 구할 수 있습니다. 특정 주간 내점수와 같거나 높은 사용자들의 목록을 구하고 그중에서 내아이디가 위치한 row의 순위를 rank값으로 받아냅니다. 참고하시기 바랍니다. 문제 : 랭킹 데이블에서 사용자 ID의 랭킹을 구한다. 단 동점자의 경우 등록 일시에 따라서 빠른 경우 높은 등수로 처리한다. 랭킹 정보는 매주마다 초기화 됩니다.매주 일요..
2016.05.20 -
특정 그룹에서 나의 랭킹(순위) 구하기
문제 : 랭킹 테이블에서 특정 그룹을 선택하고 그중에서 나의 순위는..? - 랭킹 테이블에서 친구들 또는 내가 속한 그룹에서 나의 랭킹을 알고자 할때 사용할수 있습니다. 순서 : 1. 테이블의 특정 그룹을 구합니다.2. 나의 순위를 구합니다. 참고 : IN의 활용1. 우선 다수의 친구 목록을 구하고 이를 IN명령어를 통해서 uniq_id와 비교하여 각 친구들의 row를 구합니다. uniq_id IN ('친구아이디1','친구아이디2','친구아이디3') 예를 들면 다음과 같이 하면 원하는 친구들의 랭킹 테이블을 구할수 있습니다.Select * from rank_info WHERE .... and uniq_id IN ('친구아이디1','친구아이디2','친구아이디3') 이렇게 구한 테이블에서 다시 원하는 순위를..
2016.01.11