使用分组依据对列中的重复日期进行分组

Duplicate Dates in Column Grouped using Group By

我正在尝试使用分组依据对多个表中具有相同日期的行进行计数,但结果行显示重复日期。我已更改日期格式以仅显示从日期列中删除时间的日期。

SELECT
 userprofiles."date",
 COUNT(userprofiles."date") AS NumberofRegistration,
 COUNT(CallScheduleTableFB."Date") AS NumberofCalls
FROM  userprofiles LEFT JOIN CallScheduleTableFB ON userprofiles."date"  = CallScheduleTableFB."Date"  
GROUP BY  userprofiles."date" 
UNION
SELECT
 CallScheduleTableFB."Date",
 COUNT(userprofiles."date") AS NumberofRegistration,
 COUNT(CallScheduleTableFB."Date") AS NumberofCalls
FROM  userprofiles RIGHT JOIN CallScheduleTableFB ON userprofiles."date"  = CallScheduleTableFB."Date"  
GROUP BY  CallScheduleTableFB."Date"

编辑 以下是输出

userprofiles.date |NumberofRegistration |NumberofCalls
27/07/2016 |1 |0
28/07/2016 |0 |1
28/07/2016 |0 |1
28/07/2016 |0 |1
28/07/2016 |0 |1
30/07/2016 |0 |1
30/07/2016 |0 |1
03/08/2016 |1 |0
03/08/2016 |1 |0
03/08/2016 |0 |1
03/08/2016 |0 |1

如果我没理解错的话,因为你想计算两个表中的值,你需要单个 COUNTS.

FULL OUTER JOIN

像这样:

SELECT
    COALESCE(A.date, B.Date),
    COALESCE(A.NumberofRegistration, 0),
    COALESCE(B.NumberofCalls, 0)
FROM
    (
        SELECT
        userprofiles."date",
        COUNT(userprofiles."date") AS NumberofRegistration
        FROM  userprofiles
        GROUP BY  userprofiles."date" 
    ) AS A
    FULL OUTER JOIN
    (
        SELECT
        CallScheduleTableFB."Date",
        COUNT(CallScheduleTableFB."Date") AS NumberofCalls
        FROM  CallScheduleTableFB
        GROUP BY  CallScheduleTableFB."Date"
    ) AS B
    ON A.date = B.Date

COALESCE 只是 returns 提供的第一个非 NULL 值。

@Sagar Galande,这是我建议的代码:

SELECT
      A.[Date]
    , SUM(A.NumberofRegistration) AS NumberofRegistration
    , SUM(A.NumberofCalls) AS NumberofRegistration
FROM
    (
    SELECT
         userprofiles."date" AS [Date],
         COUNT(userprofiles."date") AS NumberofRegistration,
         COUNT(CallScheduleTableFB."Date") AS NumberofCalls
    FROM  
        userprofiles 
            LEFT JOIN 
        CallScheduleTableFB 
            ON userprofiles."date"  = CallScheduleTableFB."Date"  
    GROUP BY  
        userprofiles."date" 
    UNION
    SELECT
         CallScheduleTableFB."Date" AS [Date],
         COUNT(userprofiles."date") AS NumberofRegistration,
         COUNT(CallScheduleTableFB."Date") AS NumberofCalls
    FROM  
        userprofiles 
            RIGHT JOIN 
        CallScheduleTableFB 
            ON userprofiles."date"  = CallScheduleTableFB."Date"  
    GROUP BY  
        CallScheduleTableFB."Date"
    ) AS A
GROUP BY
    A.[Date]