SQL 在 CASE 中使用 DISTINCT
SQL Use DISTINCT inside a CASE
我有以下查询:
SELECT M.TYPE, COUNT(F.CD) AS TOTAL,
COUNT(CASE WHEN F.GENDER=0 THEN F.GENDER END) AS NUM_MALE,
COUNT(CASE WHEN F.GENDER=1 THEN F.GENDER END) AS NUM_FEMALE
FROM MARC M
LEFT JOIN FUNCION F ON M.CD_FUNCION = F.CD
GROUP BY 1
此查询 returns 全部按 TYPE 计算,即使 FUNCION 在 table MARC 中有几行也是如此。但是如果我只想要 DISTINCT FUNCIONS 我该怎么做呢?第一次计数很容易,但我如何使用 DISTINCT 来区分男性和女性?
提前致谢!
您可以将 COUNT DISTINCT
与条件聚合一起使用:
SELECT M.TYPE, COUNT(DISTINCT F.CD) AS TOTAL,
COUNT(DISTINCT CASE WHEN F.GENDER = 0 THEN F.CD END) AS NUM_MALE,
COUNT(DISTINCT CASE WHEN F.GENDER = 1 THEN F.CD END) AS NUM_FEMALE
FROM MARC M LEFT JOIN
FUNCION F
ON M.CD_FUNCION = F.CD
GROUP BY M.TYPE;
我有以下查询:
SELECT M.TYPE, COUNT(F.CD) AS TOTAL,
COUNT(CASE WHEN F.GENDER=0 THEN F.GENDER END) AS NUM_MALE,
COUNT(CASE WHEN F.GENDER=1 THEN F.GENDER END) AS NUM_FEMALE
FROM MARC M
LEFT JOIN FUNCION F ON M.CD_FUNCION = F.CD
GROUP BY 1
此查询 returns 全部按 TYPE 计算,即使 FUNCION 在 table MARC 中有几行也是如此。但是如果我只想要 DISTINCT FUNCIONS 我该怎么做呢?第一次计数很容易,但我如何使用 DISTINCT 来区分男性和女性?
提前致谢!
您可以将 COUNT DISTINCT
与条件聚合一起使用:
SELECT M.TYPE, COUNT(DISTINCT F.CD) AS TOTAL,
COUNT(DISTINCT CASE WHEN F.GENDER = 0 THEN F.CD END) AS NUM_MALE,
COUNT(DISTINCT CASE WHEN F.GENDER = 1 THEN F.CD END) AS NUM_FEMALE
FROM MARC M LEFT JOIN
FUNCION F
ON M.CD_FUNCION = F.CD
GROUP BY M.TYPE;