我有2个表,两个表都包含不同的id值.某些id值可能出现在两个表中,有些值对于每个表都是唯一的.Table1有10,910行,Table2有11,304行
运行左连接查询时:
SELECT COUNT(DISTINCT a.id)
FROM table1 a
JOIN table2 b on a.id = b.id
Run Code Online (Sandbox Code Playgroud)
我在两个表中共享了10,896行或10,896个ID.
但是,当我FULL OUTER JOIN在这两个表上运行时:
SELECT COUNT(DISTINCT a.id)
FROM table1 a
FULL OUTER JOIN EACH table2 b on a.id = b.id
Run Code Online (Sandbox Code Playgroud)
我总共获得了10,896行,但我期待来自table1的所有10,910行.
我想知道我的查询语法是否存在问题.
当您使用EACH时 - 看起来您正在以旧版SQL模式运行查询.
在BigQuery Legacy SQL中 - COUNT(DISTINCT)函数是概率性的 - 给出统计近似值,并不保证是精确的.
您可以使用EXACT_COUNT_DISTINCT()函数 - 这个函数可以为您提供确切的数字但后端稍贵一些
更好的选择 - 只需使用标准SQL
对于您的特定查询,您只需要删除EACH关键字,它应该作为一个魅力
#standardSQL
SELECT COUNT(DISTINCT a.id)
FROM table1 a
JOIN table2 b on a.id = b.id
Run Code Online (Sandbox Code Playgroud)
和
#standardSQL
SELECT COUNT(DISTINCT a.id)
FROM table1 a
FULL OUTER JOIN table2 b on a.id = b.id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4504 次 |
| 最近记录: |