PHP SQL 질문
본문
SELECT
SUM(IF(result = 1, 1, 0)) win_count,
SUM(IF(result = 2, 1, 0)) fail_count,
mb_id, mb_nick
FROM TABLE
WHERE result > 0
GROUP BY mb_id
ORDER BY idx, win_count DESC
LIMIT 30
명령어는 위와같이 했습니다.
문제는 해당 테이블에서 최근 30개만 추려서 win_count가 높은순으로 정렬하려고 합니당
해당 테이블에는 아이디가 중복으로 데이터가 입력되어있습니다. 그래서 중복을 거르기 위해서
GROUP BY를 사용했는데요.. 생각해보니 GROUP을 사용하면 데이터를 중복해서 가져오지않는데
최근 30개의 데이터에서 중복으로 같은 아이디가 5개가 있다면 5개 모두 가져와서 win_count를 더해줘야하는데
1개만 가져오는거 같더라구요..
하고자하는건 해당 테이블은 중복으로도 아이디값이 들어가지만 최근 30개를 가져와서 win_count, fail_count를 더한뒤, win_count가 높은순으로 정렬하고 중복을 걸러야하는건데.. 어렵네요 ㅜㅜ
!-->답변 2
실제 데이타를 좀 봐야 정확하겠지만
SELECT * FROM (
SELECT
(SELECT COUNT(*)
FROM (SELECT * FROM TABLE ORDER BY idx DESC LIMIT 30) b
WHERE b.result = 1 AND b.mb_id = a.mb_id
) win_count,
(SELECT COUNT(*)
FROM (SELECT * FROM TABLE ORDER BY idx DESC LIMIT 30) c
WHERE c.result = 2 AND c.mb_id = a.mb_id
) fail_count,
mb_id,
mb_nick
FROM
(SELECT * FROM TABLE ORDER BY idx DESC LIMIT 30) a
GROUP BY a.mb_id
) X
ORDER BY win_count DESC
이렇게 하면될거 같은데요
!-->최근 30개면
idx가 pk라고 하면
SELECT
SUM(IF(result = 1, 1, 0)) win_count,
SUM(IF(result = 2, 1, 0)) fail_count,
mb_id, mb_nick
FROM ( select * from TABLE order by idx DESC limit 30) A
WHERE result > 0
GROUP BY mb_id
ORDER BY win_count DESC
LIMIT 30
답변을 작성하시기 전에 로그인 해주세요.