Member 테이블
userlevel | money1 | money2 | bestscore | userid | useridx |
1 | 50 | 100 | 3000 | test1 | 1 |
1 | 2000 | 50 | 2000 | test2 | 2 |
2 | 1000 | 10 | 5000 | test3 | 3 |
3 | 700 | 70 | 6000 | test4 | 4 |
대강 이렇게 있다고 칩시다.
힘들어서 4개만 적어놨는데 실제로는 매우 많겠지요?
그런 관계로
한 페이지당 10개씩해서 다음 페이지로 넘어가는 sql문을 구성하고 있습니다.
실제로 이미 다른 페이지는 구성된 상태구요.
select * from (select ROW_NUMBER() OVER(ORDER BY bestscore desc) as rownum, useridx, userid, money1, money2, userlevel from d_memplayer) as #TMP where rownum between 1 and 10
이렇게요. 그러면 10개의 행씩 출력하며, 뒤에 1 and 10부분을 수정해주면 다음 페이지로 넘어갈 수 있지요.
문제는, 지금 구현하려고 하는 것입니다.
userlevel 별로 행을 구성하여, 통계값을 출력하려고 하는데요,
userlevel | members | sum_money1 | sum_money2 | topscore | avgscore |
1 | 2 | 2050 | 150 | 3000 | 2500 |
2 | 1 | 1000 | 10 | 5000 | 5000 |
대강 이렇게 출력되야 하겠지요.
위의 sql처럼 쓰려고 합니다.
그런데 어째선지 계속 문제가 발생하더군요.
SELECT (select COUNT(*) from member where userlevel = 1) as members, SUM(money1) as sum_money1, SUM(money2) as sum_money2, max(bestscore) as topscore, AVG(bestscore) as avgscore FROM member where userlevel = 1
이렇게 하면 한 줄은 출력되는데, 이를 위의 쿼리문처럼 10개씩 출력하려고하니(그렇다고 10번 부르는건 asp.net로 만든 페이지 구성상 안됩니다...) 문제가 많네요.
혹시 해결방법을 아시는분은 답변좀 부탁드립니다 ㅠ_ㅠ
Comment 6
-
김동우(탱소연)
2014.03.04 18:32
member 테이블에 group by 로 userlevel 묶어서 하시면 되지 않나요...??위에 표 그림 통계 값처럼나오게하시는거면...select userlevel, count(userlevel) members, sum(money1) sum_money1, sum(money2) sum_money2, max(bestscore) as topscore, AVG(bestscore) as avgscore FROM #tmpmember group by userlevel본문에 userlelvel 1의 topscore 는 3000이 맞는거같아 보이는... -
Mr황
2014.03.04 18:35
topscore는 그냥 임의대로 대강 적은겁니다^^;; 적다보니 sum하고 햇갈렸네요.
답변 감사드립니다. 그런데, 음.. userlevel 을 1,2,3,4,5 식으로 해서 한번에 나오게 하려면 어찌해야할지 모르겠네요... 지금은 userlevel=1로 하지만, 레벨이 20까지 있는데 이걸 한 sql문으로 두페이지에 걸쳐서 각 페이지별 10개씩 출력되게 하고싶은데...
select * from (select ROW_NUMBER() OVER(ORDER BY userlevel asc) as rownum, (select COUNT(*) from member where 이부분) as members, SUM(money1) as sum_money1, SUM(money2) as sum_money2, max(bestscore) as topscore, AVG(bestscore) as avgscore, userlevel FROM member where 이부분 group by userlevel) as #TMP where rownum between 1 and 10
이렇게하면 테이블에 없는 내용(예를 들어 11레벨인 사람이 없으면)은 그냥 넘어가서 10레벨, 12레벨 이렇게 칼럼출력이 되더군요...
그리고, 이부분 이라고 적혀있는 부분을 어떻게 손봐야겠는데... 1레벨이 몇명있는지, 2레벨이 몇명있는지 출력하려고 합니다만 어렵네요...
-
김동우(탱소연)
2014.03.05 09:41
위에도있지만... group by 로 이미 묶여 있으니까 이부분이 포함된 select 문 대신에 count(userlevel) as members 넣으면 되지않나요 ?? -
Mr황
2014.03.05 10:59
감사합니다^^;; 이 부분이 두개인데 하나만 해놨었네요. 뒷부분때문에 댓글단거였는데 정신이 반 나간 상태였나봅니다. ㅠ_ㅠ; -
김동우(탱소연)
2014.03.05 13:26
아래쪽 이부분은 구지없어도 값이 나오지않나요..?? -
Mr황
2014.03.05 14:07
위에서 적어놨다시피 해당 레벨이 없을때는 출력이 안됩니다.
1레벨 두명
2레벨 세명
4레벨 한명
이런식으로 3레벨이 아예 빠져버리더군요...