database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 29538 게시물 읽기
No. 29538
[쿼리 튜닝] 고수님들 도와주세요.
작성자
놀러와써
작성일
2010-02-09 11:09ⓒ
2010-02-09 15:20ⓜ
조회수
6,702

안녕하십니까?  접속자  이름별 상세 통계를 뽑으려고 하는데요

생각처럼 잘 되지 않아서 고수님들께 도움을 요청하고자 이렇게 글 올립니다.

제발 도와주세요..ㅜㅜ 벌써 일주일 째 입니다. 

일단 테이블은 한개 입니다.

테이블 명 accepted

필드는 name, src, vtm, cnt, detecdate

뽑으려는 모양은

 name               src               vtm                      cnt                   total_cnt

홍길동          1.1.1.1       10.10.10.10            100                        180

                                          10.11.11.11             60

                                          10.12.12.12             20

                      1.2.2.2        11.10.10.10            90                          170

                                          11.11.11.11             50

                                          11.12.12.12             20

                       1.3.3.3       12.10.10.10            70                             130

                                          12.11.11.11             40

                                           12.12.12.12            20

추노                2.2.2.2      100.100.100.100    90                          120

                                          101.101.101.101     20

                                          102.102.102.102     10

                         2.3.3.3     111.111.111.111      80                        100

                                          122.122.122.122        30

                                          133.133.133.133         20

 

{이하 중략}

                                          

이렇게 하여 top 10 명에 관해서 데이터를 뽑으려고 합니다.

생각처럼 잘 되지 않아서 글 올립니다.

지금까지 짠 쿼리는

select a.name, b.src, a.cnt, b.cnt
from(
select name, sum(cnt) cnt
from accepted
where detectdate >= str_to_date('20100101 000000','%Y%m%d %H%i%s')
and detectdate <= str_to_date('20100131 235959','%Y%m%d %H%i%s')
group by name
order by cnt desc
limit 10
) a left join (
select name, src, sum(cnt) cnt
from accepted
where detectdate >= str_to_date('20100101 000000','%Y%m%d %H%i%s')
and detectdate <= str_to_date('20100110 235959','%Y%m%d %H%i%s')
group by name, src
order by cnt desc
) b on a.name = b.name;

 

이렇게 됩니다.

 

고수님들의 가르침이 필요 합니다..ㅜㅜ

진심으로 부탁드립니다.

 

감사합니다(__)

이 글에 대한 댓글이 총 2건 있습니다.

안녕하세요 박성원입니다.

 

문의하신 내용을 읽어봣는데 이해가 되질 않습니다 ^^;;

접속자 이름별 상세 통계 즉 accepted 테이블에서 10명에 해당하는 데이터만 뽑을 시는건지 시간은 어떻게 산정할 것인지 등등의 정보가 부족합니다.

보내주신 쿼리를 봐서는 1월 접속자에 10명에 대해서 1일부터 10일까지 접속한 유저와 left join을 진행하시는데 이부분 역시 이해가 안되는군요

정확하게 어떠한 데이터가 필요한지 말씀을 해주셔야 도움을 드릴 수 있을 듯합니다.

박성원(darkancia)님이 2010-02-10 10:37에 작성한 댓글입니다.

먼저 관심 가져 주셔서 감사합니다.

 

설명을 드리자면

 

1월 10일 간의 접속자 이름별로 TOP 10 을 뽑습니다. count 로 desc 해서요.. 다음에

각각 이름별로 src_ip TOP 3을 뽑습니다. 물론  count 로 desc 해서요.. 다음에

각각 src_ip 별로 vtm_ip TOP 3을( count 로 desc) 뽑아야 하는 상황인것입니다.

날짜는 랜덤 하지만 일단 1월 1일 부터 10일 까지로 지정 해놓은 것이고요..

그래서 모든 데이터가 모두 출력이 된다면 총 90줄의 데이터가 나와야 하는 상황인것입니다.

1개의  name 값에 대한 src_ip 3개와 vtm_ip 9개..

이것들이 모여서 총 90개의 row 를 가진 데이터가 나와야 합니다.

이것을 정리 하면 위에 그럼으로 표현된(표현이 좀 어설픕니다..ㅜㅜ)

형식의 테이블로 나오게 되는 것이죠

놀러와써님이 2010-02-10 11:17에 작성한 댓글입니다.
이 댓글은 2010-02-10 11:18에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
29542int 디폴트 [2]
김성민
2010-02-10
6062
29540[mysql]lock문제로 max_connection 초과된 문제 [4]
김하림
2010-02-10
7154
29539레코드 값으로 PK 값 알아내기 [1]
oldlove7
2010-02-10
5746
29538[쿼리 튜닝] 고수님들 도와주세요. [2]
놀러와써
2010-02-09
6702
29537VIEW 테이블 SELECT만 할 수 있는 권한의 USER를 생성할 수 있나요? [2]
서광호
2010-02-08
6478
29536쿼리 에러가 나오는데요 에러좀 잡아주심감사할게요^^'; [1]
김정
2010-02-07
5932
29535멀쩡히 존재하는데 mysqldump시에 에러라면.. [2]
김주홍
2010-02-05
6491
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다