mysql join group by에서 count if 중복값 제거하기 채택완료
a table
no date
1 2022-01-01
2 2022-02-02
3 2022-03-03
가 있고
b table
date name
2022-01-01 홍길동
2022-01-01 홍길동
2022-02-02 홍길동
이런 테이블이 있을때
같은날짜에 총인원과 홍길동인사람(중복제거)의 갯수로 아래처럼 결과값이 나오고 싶은데,
</p>
<p column-span="none">date count(member) hong</p>
<p column-span="none">2022-01-01 2 "<strong>1" <<<이게 1이 안됨</strong></p>
<p column-span="none">2022-02-02 1 1</p>
<p column-span="none">
짜본 쿼리는
</p>
<pre column-span="none" spellcheck="false">
<code data-code-block-language="markup">select a.date,count(b.name) as count(member),
COUNT(if(b.name='홍길동',name,NULL)) AS hong
from a join b on a.date = b.date
group by date;</code></pre>
<p column-span="none">
이런데
이러면 나머지는 괜찮은데 홍길동인사람 중복을걸를수 없더라구요.
방법이 없을까요?
답변 2개
b table 대신에
( select DISTINCT date,name from b_table ) b_table
사용하시면 되겠네요.
전체 내용을 알면 더 나은 방법이 있을 수 있습니다.
답변에 대한 댓글 2개
( select DISTINCT date,name from b_table ) b -- 여기에 넣으면 됩니다.
on a.date = b.date ...
댓글을 작성하려면 로그인이 필요합니다.
MySQL에서 JOIN과 GROUP BY를 사용하면서 COUNT를 사용하려면, 중복 값을 제거하려면 DISTINCT 키워드를 사용할 수 있습니다.
SELECT COUNT(DISTINCT column_name)</span></p>
<p><span style="color: rgb(209, 213, 219); font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; white-space: pre-wrap; background-color: rgb(68, 70, 84);">FROM table1</span></p>
<p><span style="color: rgb(209, 213, 219); font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; white-space: pre-wrap; background-color: rgb(68, 70, 84);">JOIN table2</span></p>
<p><span style="color: rgb(209, 213, 219); font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; white-space: pre-wrap; background-color: rgb(68, 70, 84);">ON table1.id = table2.id</span></p>
<p><span style="color: rgb(209, 213, 219); font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; white-space: pre-wrap; background-color: rgb(68, 70, 84);">GROUP BY column_name;
위의 쿼리는 table1과 table2를 JOIN하고, id 열을 기준으로 그룹을 묶어 column_name에 대한 중복 값을 제거하여 COUNT를 수행합니다.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인