如何从联合查询中找出计数?
How to find out the count from union query ?
我想从 UNION
查询中找出行数。
我试过这个:
SELECT COUNT(*) FROM (
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID)
FROM [Laola].[AGG_0]
GROUP BY Platform, DeviceCategory
UNION
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID)
FROM [Laola].[AGG_2]
GROUP BY Platform, DeviceCategory
) x
我收到以下错误:
No column was specified for column 3 of x
您需要给第 3 列起一个别名:
SELECT COUNT(*) FROM (
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID) As Count
FROM [Laola].[AGG_0]
GROUP BY Platform, DeviceCategory
UNION
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID) As Count
FROM [Laola].[AGG_2]
GROUP BY Platform, DeviceCategory
) x
您只需要一个列的别名:
SELECT COUNT(*)
FROM (
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID) as nr
FROM [Laola].[AGG_0]
GROUP BY Platform, DeviceCategory
UNION
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID)
FROM [Laola].[AGG_2]
GROUP BY Platform, DeviceCategory
) x
您需要为应用 COUNT 计算的列指定名称。
SELECT COUNT(*) FROM (
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID) Count
FROM [Laola].[AGG_0]
GROUP BY Platform, DeviceCategory
UNION
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID)
FROM [Laola].[AGG_2]
GROUP BY Platform, DeviceCategory
) x
不要进行 UNION
查询!它删除重复项。使用 UNION ALL
.
下面给出了行计数和来自每个 table 的唯一计数的总和:
SELECT COUNT(*), SUM(cnt)
FROM ((SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID) as cnt
FROM [Laola].[AGG_0]
GROUP BY Platform, DeviceCategory
) UNION ALL
(SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID) as cnt
FROM [Laola].[AGG_2]
GROUP BY Platform, DeviceCategory
)
) x;
如果您不使用 COUNT(DISTINCT)
,则将其从子查询中删除。它会产生开销,我不能 100% 确定优化器会删除它。
从准确、简洁、高效的角度,我推荐:
SELECT COUNT(*)
FROM ((SELECT DISTINCT Platform, DeviceCategory
FROM [Laola].[AGG_0]
) UNION ALL
(SELECT DISTINCT Platform, DeviceCategory
FROM [Laola].[AGG_2]
)
) x;
我想从 UNION
查询中找出行数。
我试过这个:
SELECT COUNT(*) FROM (
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID)
FROM [Laola].[AGG_0]
GROUP BY Platform, DeviceCategory
UNION
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID)
FROM [Laola].[AGG_2]
GROUP BY Platform, DeviceCategory
) x
我收到以下错误:
No column was specified for column 3 of
x
您需要给第 3 列起一个别名:
SELECT COUNT(*) FROM (
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID) As Count
FROM [Laola].[AGG_0]
GROUP BY Platform, DeviceCategory
UNION
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID) As Count
FROM [Laola].[AGG_2]
GROUP BY Platform, DeviceCategory
) x
您只需要一个列的别名:
SELECT COUNT(*)
FROM (
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID) as nr
FROM [Laola].[AGG_0]
GROUP BY Platform, DeviceCategory
UNION
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID)
FROM [Laola].[AGG_2]
GROUP BY Platform, DeviceCategory
) x
您需要为应用 COUNT 计算的列指定名称。
SELECT COUNT(*) FROM (
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID) Count
FROM [Laola].[AGG_0]
GROUP BY Platform, DeviceCategory
UNION
SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID)
FROM [Laola].[AGG_2]
GROUP BY Platform, DeviceCategory
) x
不要进行 UNION
查询!它删除重复项。使用 UNION ALL
.
下面给出了行计数和来自每个 table 的唯一计数的总和:
SELECT COUNT(*), SUM(cnt)
FROM ((SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID) as cnt
FROM [Laola].[AGG_0]
GROUP BY Platform, DeviceCategory
) UNION ALL
(SELECT Platform, DeviceCategory, COUNT(DISTINCT FullVisitorID) as cnt
FROM [Laola].[AGG_2]
GROUP BY Platform, DeviceCategory
)
) x;
如果您不使用 COUNT(DISTINCT)
,则将其从子查询中删除。它会产生开销,我不能 100% 确定优化器会删除它。
从准确、简洁、高效的角度,我推荐:
SELECT COUNT(*)
FROM ((SELECT DISTINCT Platform, DeviceCategory
FROM [Laola].[AGG_0]
) UNION ALL
(SELECT DISTINCT Platform, DeviceCategory
FROM [Laola].[AGG_2]
)
) x;