조건이 고유한 경우 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
'programing' 카테고리의 다른 글
PowerShell의 생성자 체인링 - 같은 클래스의 다른 생성자 호출 (0) | 2023.10.03 |
---|---|
시트의 목록 상자에서 값 가져오기 (0) | 2023.10.03 |
Spring Boot 2.0.x가 특정 프로파일에 대해 보안을 사용하지 않도록 설정함 (0) | 2023.09.28 |
다른 변수의 thymelephth:필드 값을 설정하는 방법 (0) | 2023.09.28 |
스레드 오류 탐지를 위해 Helgrind 또는 DRD를 사용해야 합니까? (0) | 2023.09.28 |