我有一个“供应商”表,看起来像这样......
**company itemKey itemPriceA itemPriceB**
companyA, 203913, 20, 10
companyA, 203914, 20, 20
companyA, 203915, 25, 5
companyA, 203916, 10, 10
每个公司可能有数百万行,我想查询它以返回每个公司的 itemPriceA 和 itemPriceB 之间的代表性增量。我不在乎我带回哪个增量,只要它不是零/空(如第2行或第4行),所以我使用像这样的ANY_VALUE...
SELECT company
, ANY_VALUE(CASE WHEN (itemPriceA-itemPriceB)=0 THEN null ELSE (itemPriceA-itemPriceB) END)
FROM vendors
GROUP BY 1
它似乎有效,但我注意到有两个句子似乎矛盾谷歌的文档...
"当组中所有行的表达式为 NULL 时,返回 NULL。 ANY_VALUE 的行为就像指定了 RESPECT NULLS 一样;考虑并选择表达式为 NULL 的行。"
如果 ANY_VALUE 返回 null“当表达式为 NULL 时allrows in the group" 它不应该为 companyA 返回 null,对吧(因为 4 行中只有 2 行为 null)?但是第二句话听起来确实会包含 null 行。
附注您可能想知道为什么我不简单地添加一个 WHERE 子句“WHERE itemPriceA-itemPriceB>0”,但如果一家公司只有匹配的价格,我仍然希望该公司在我的结果中返回。