我想从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
我收到了以下错误:
没有为
的第3列指定列x
答案 0 :(得分:3)
您需要为要应用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
答案 1 :(得分:2)
您需要为第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
答案 2 :(得分:1)
您只需要该列的别名:
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
答案 3 :(得分:1)
不要进行UNION
查询!它删除重复。使用UNION ALL
。
以下给出了行计数以及每个表中唯一计数的总和:
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;