중복 레코드 갯수 구하기
SELECT rownum, uid, cnt
FROM (
select uid, count(uid) cnt
from member
group by name
having count(uid) > 1
)
mysql 에서 ROWNUM
SELECT
@RNUM:=@RNUM+1 AS ROWNUM , a.*
FROM (SELECT @RNUM:=0) R, table a
Top 100 순위를 뿌려주는 mysql query를 만들었다.
SELECT @RNUM:=@RNUM+1 AS ROWNUM ,a.* FROM (SELECT @RNUM:=0) R,
(
select a.account, sum(score) as score from table1 a
where a.account = b.account group by a.account order by score desc
) a limit 100
table1과 2를 join한다음 그 값을 rownum먹인다.
누적된 갯수에서 ROWNUM
SELECT @ROWNUM := @ROWNUM + 1 AS ROWNUM, LEFT(dateInput, 10) dI, farmer
FROM tbl_selector_input, (SELECT @ROWNUM := 0) R
WHERE isDel = 'n' -- 조건 : 삭제 되지 않은 데이터
GROUP BY dI, farmer -- 정렬순 : 1.날짜 2.생산자명
HAVING COUNT(dI) > 1 -- 조건 : 날짜 2009-07-01 형태로 구분
ORDER BY dI DESC -- 정렬순 : 날짜 역순으로 정렬
SELECT ROWNUM, dI, farmer
FROM (
SELECT @ROWNUM := @ROWNUM + 1 AS ROWNUM, LEFT(dateInput, 10) dI, farmer
FROM tbl_selector_input, (SELECT @ROWNUM := 0) R
WHERE isDel = 'n'
GROUP BY dI, farmer
HAVING COUNT(dI) > 1
ORDER BY dI DESC
) A
-- WHERE A.ROWNUM < 200
tbl_selector_input 테이블에서 날짜별(시간제외,LEFT(dateInput, 10))로 입력된 값을 그룹으로 묶고 해서
레코드 숫자만큼 rownum 이 먹히는걸 확인했습니다.
while(rs.next()) {
++i_total_no;
}
이런 형태보다는 좀더 시간이 줄어 들었을 걸로 생각됩니다. ㅎㅎㅎ.
-- ROWNUM 샘플
SELECT @ROWNUM := @ROWNUM + 1 AS ROWNUM, TEST_TABLE.* FROM TEST_TABLE, (SELECT @ROWNUM := 0) R
ROWNUM을 이용하여 다른 작업을 하기위해서는 다음과 같이 서브쿼리를 이용하면 된다.
SELECT A.*FROM( SELECT @ROWNUM := @ROWNUM + 1 AS ROWNUM, TEST_TABLE.* FROM TEST_TABLE, (SELECT @ROWNUM := 0) R) AWHERE A.ROWNUM < 100
UNION 과 JOIN 의 차이점
A테이블 B테이블
num name num total
1 홍길동 1 60
2 홍길순 3 80
1. union
select * from A
union
select * from b
----------------
1 홍길동
2 홍길순
1 60
3 80
2. join
select * from A join B on A.num=B.num
--------------------
1 홍길동 1 60
select * from A left outer join B on A.num=B.num
--------------------
1 홍길동 1 60
2 홍길순 null null
select * from A left outer join A on A.num=A.num
--------------------
1 홍길동 1 홍길동
2 홍길순 2 홍길순
예제에서도 알 수 있듯이 union은 두개 테이블을 연속해서 보여주는 것이고 join은 두개 테이블을 조건에 맞에 합해주는 것이죠.
그리고 같은 테이블끼리 조인 됩니다.