如何从联合查询中找出计数?
我想从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
您需要为应用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
你需要给第三列的别名:
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
第二个子查询中不需要计数的别名。 –
@TimBiegeleisen从技术上讲,不,你是对的。但这只是个习惯,总是让双方都感到混淆。 – Siyual
你只需要一个别名列:
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
第二个子查询中不需要计数的别名。 –
哈哈!是的,只是出于习惯。编辑! –
不要做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;
谢谢你的回答。我使用了'UNION'查询来检查两个'result'集合是否相等。在使用'UNION'后,如果我得到count大于两个表中的任何一个,这意味着它们没有相同的数据。这就是我使用'UNION'的原因。 –
@ Alexandru-IonutMihai。 。 。这是对'UNION'的误用。您应该使用类似'FULL OUTER JOIN'的东西来代替。也许你应该问一个关于完成你的目标的最佳途径的另一个问题。而且,如果你的是低调的话,我认为在这种情况下它是无礼的。 –
不,我在发布答案时赞成你。 –
这是很多人的一个SO解决'不列职位是为x'列#指定他们都有不同的来源但基本上答案/解决方案都是一样的。内部查询缺少列名称。看到这个可能的重复[**没有为'tbl'**'的列1指定列名称(https://*.com/questions/31000895/no-column-name-was-specified-for-column-作为一个例子)。 – Nope