在USQL中对多列进行计数

时间:2018-05-31 10:30:53

标签: azure-data-lake u-sql

我想计算不同的两列。

在想象中的sql中,我写下如下:

COUNT(DISTINCT col1, col2)

在T-SQL中,这可以通过在子查询中进行一次分组,然后在外部查询中进行第二次分组来完成 - like this

据我所知,USQL没有子查询,所以我试图弄清楚如何做到这一点。我想我可以使用两个别名查询,但我想知道是否有更好的方法。

2 个答案:

答案 0 :(得分:3)

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;

答案 1 :(得分:1)

如果你不能使用子查询那么一个"丑陋"方法是连接列:

SELECT COUNT(DISTINCT String.Concat(col1, '^', col2))
FROM tab;

当然,您必须处理NULL并转换为正确的数据类型。