테스트 사이트 - 개발 중인 베타 버전입니다

mysql join group by에서 count if 중복값 제거하기 채택완료

rlawhd 2년 전 조회 2,130

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개

채택된 답변
+20 포인트

b table 대신에

( select DISTINCT date,name from b_table ) b_table

사용하시면 되겠네요.

전체 내용을 알면 더 나은 방법이 있을 수 있습니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

r
rlawhd
2년 전
답변 감사합니다. b table대신이면 어디 말씀이신가요??
엑스엠엘
2년 전
... from a join

( 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개

r
rlawhd
2년 전
count는 그게맞는데 count if라서요 ㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인