我想在两列上计算不同的。
在虚构的 sql 中,我会写以下内容:
COUNT(DISTINCT col1, col2)
在 T-SQL 中,这是通过在子查询中进行一个分组,然后在外部查询中进行第二个分组来完成的 -像这样
据我所知,USQL 没有子查询,所以我有点难以弄清楚如何做到这一点。我想我可以使用两个别名查询,但我想知道是否有更好的方法。
我想在两列上计算不同的。
在虚构的 sql 中,我会写以下内容:
COUNT(DISTINCT col1, col2)
在 T-SQL 中,这是通过在子查询中进行一个分组,然后在外部查询中进行第二个分组来完成的 -像这样
据我所知,USQL 没有子查询,所以我有点难以弄清楚如何做到这一点。我想我可以使用两个别名查询,但我想知道是否有更好的方法。
U-SQL 确实支持子查询。它(尚未)支持的是标量子查询和相关子查询(对两者使用连接)。
所以解决方案
SELECT COUNT(*) AS count
FROM (SELECT DISTINCT DocumentId, DocumentSessionId
FROM DocumentOutputItems) AS internalQuery
或上面链接中提到SUM(CASE)的GROUP BY两者都有效。
或者,U-SQL 还允许您命名内部查询并在外部语句中使用它,这使得脚本更容易阅读更复杂的情况(它类似于公共表表达式,因为它只命名查询和不执行它):
@inner =
SELECT DISTINCT DocumentId, DocumentSessionId
FROM DocumentOutputItems;
@result = SELECT COUNT(*) AS count FROM @inner;
如果您不能使用子查询,那么一种“丑陋”的方法是连接列:
SELECT COUNT(DISTINCT String.Concat(col1, '^', col2))
FROM tab;
当然,您必须处理 NULL 并转换为正确的数据类型。