programing

조건이 고유한 경우 MySQL 고유 카운트

muds 2023. 9. 28. 08:53
반응형

조건이 고유한 경우 MySQL 고유 카운트

저는 주어진 데이터 세트에 얼마나 많은 다른 여성과 남성이 있는지를 알려주는 쿼리를 만들고자 합니다.당사자는 '텔'이라는 번호로 식별됩니다.동일한 '텔'이 여러 번 나타나는 것은 가능하지만, '텔'의 성별은 한 번만 계산해야 합니다!

7136609221 - 남성
7136609222 - 남성
7136609223 - 여
7136609228 - 남성
7136609222 - 남성
7136609223 - 여

이 example_dataset은 다음을 산출합니다.
총 고유 성별 수 : 4
총 고유 남성 수 : 3
총 고유 여성 수 : 1

내 쿼리 시도:

SELECT COUNT(DISTINCT tel, gender) as gender_count, 
       COUNT(DISTINCT tel, gender = 'male') as man_count, 
       SUM(if(gender = 'female', 1, 0)) as woman_count 
FROM example_dataset;

사실 거기엔 두 번의 시도가 있어요.COUNT(DISTINCT tel, gender = 'male') as man_count그냥 돌아오는 것 같아요.COUNT(DISTINCT tel, gender)-- 거기서 조건을 따지지 않습니다.그리고.SUM(if(gender = 'female', 1, 0))모든 여성 기록을 세지만 구별된 텔로 필터링되지는 않습니다.

다음은 하위 쿼리를 사용하는 하나의 옵션입니다.DISTINCT:

SELECT COUNT(*) gender_count,
   SUM(IF(gender='male',1,0)) male_count,
   SUM(IF(gender='female',1,0)) female_count
FROM (
   SELECT DISTINCT tel, gender
   FROM example_dataset
) t

하위 쿼리를 사용하지 않으려는 경우에도 사용할 수 있습니다.

SELECT COUNT(DISTINCT tel) gender_count,
    COUNT(DISTINCT CASE WHEN gender = 'male' THEN tel END) male_count,  
    COUNT(DISTINCT CASE WHEN gender = 'female' THEN tel END) female_count
FROM example_dataset

@segeddes의 두 번째 솔루션과 유사한 다른 솔루션이 있습니다.

Select COUNT(DISTINCT tel) as gender_count, 
       COUNT(DISTINCT IF(gender = "male", tel, NULL)) as male_count, 
       COUNT(DISTINCT IF(gender = "female", tel, NULL)) as female_count 
FROM example_dataset

설명:

IF(gender = "male", tel, NULL)

위 식은 성별이 남성이면 TEL을 반환하고 그렇지 않으면 NULL 값을 반환합니다.

그러면 저희가.

DISTINCT

모든 중복을 제거합니다.

그리고 마지막으로

COUNT(DISTINCT IF(gender = "male", tel, NULL))

성별이 남성인 행의 모든 구별되는 출현 수를 계산합니다.

참고: 식이 포함된 SQL COUNT 함수는 NULL 값이 아닌 행만 계산합니다. 자세한 설명은 http://www.mysqltutorial.org/mysql-count/ 에서 확인하십시오.

언급URL : https://stackoverflow.com/questions/19672001/mysql-distinct-count-if-conditions-unique

반응형