mysql 한개의 칼럼 기준으로 그룹짓고 갯수를 얻은 후 다른 테이블과 join하고 싶습니다.
조회수 594회
A테이블에서 ID를 기준으로 GROUP지었습니다.
SELECT TOP 200 A.ID,COUNT(A.ID) AS CNT
FROM A A
LEFT join ANAME as Aname on A.ID = Aname.ID
LEFT join BNAME as Bname on Aname.SEQ = Bname.SEQ
where A.POI_ID > 1
이렇게 해서 A테이블 상위 200개에 대하여 A.ID와 각 ID의 갯수를 CNT로 구했는데요.
이제 이 A.ID 를 기준으로 Aname,Bname 테이블과 조인을 하고 싶습니다.
A.ID, A.CNT, Aname.NAME, Bname.가입날짜 이렇게 네개가 나왔으면 좋겠는데,
SELECT FROM (SELECT ~)
로 구하니까 A.ID가 중복되는것들이 나오더라고요.
A테이블
--------------------
ID|지역
1|서울
2|인천
3|경기
1|SEOUL
2|INCHEON
Aname테이블
---------------------
ID|name
1|대한
2|민국
3|파리
4|북한
Bname테이블
---------------------
ID|가입날짜
1|200101
2|990101
3|901007
원하는 값
-----------
ID|CNT|NAME|가입날짜
1|2|대한|200101
2|2|민국|990101
3|1|북한|901007
A.ID기준으로 중복되는 갯수를 구하고, 중복되지않는 ID만 뽑아서 JOIN 해야 합니다. 도와주세요~~
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
SELECT TOP 200 A.ID,COUNT(A.ID) AS CNT FROM A A LEFT join ANAME as Aname on A.ID = Aname.ID LEFT join BNAME as Bname on Aname.SEQ = Bname.SEQ where A.POI_ID > 1
이 쿼리 돌리면 1rows 만 나오지 않나요?
SELECT A.ID,COUNT(A.ID) AS CNT, Aname.name, Bname.가입날짜 FROM A A LEFT join ANAME as Aname on A.ID = Aname.ID LEFT join BNAME as Bname on Aname.SEQ = Bname.SEQ where A.POI_ID > 1 group by a.id;
하시면 중복된 값이 있을 경우 첫번째 행의 값 기준으로 될꺼예요.
- 제가 예시에는 테이블 칼럼을 하나씩 적어놨는데, 테이블당 칼럼이 열댓개씩 있거든요. 그래서 그런지 GROUP BY절로 묶으면 Bname테이블의 다른 칼럼이 group by 절에 없으므로 select 목록에서 사용할 수 없습니다. 에러가 발생합니다 알 수 없는 사용자 2020.7.28 16:11
- 보여주신 예제에 대한 답변이고 그게 작성자님이 고민하시는 내용이라 판단해서 답변드렸는데 작성자님이 진행중인 DB의 스키마에 대해서 공개 하지 않았는데 제가 어찌 그에 맞춰서 답변드립니까..; 김호원 2020.7.29 10:02
댓글 입력