我试图为toad构建一个查询,但是,以下内容无法使用。
select count (distinct t.column1, t.column2) from schema.table ;
然而,上面的查询在 hadoop hive 中工作得很好。有什么建议可以改进查询,使其适用于toad?
mdfafbf11#
模仿这种行为是有点棘手的,最安全的方法可能是:
select sum(case when seqnum = 1 and column1 is not null and column2 is not null then 1 else 0 end) from (select t.*, row_number() over (partition by column1, column2 order by column1) as seqnum from t ) t
("order by "这一列并不重要。许多数据库都需要这一列,所以我经常包括它。)这个版本适用于任何数据库,而不仅仅是db2.问题是,如果任何值是NULL,hive不计算一行。问题是,如果任何值是NULL,hive就不计算一条记录,这一点考虑到了。在子查询中使用 "select distinct "比较接近,但是它计算 "NULL "值 -- 而且这种改变可能不适合查询中的其他列。然而当有重叠的值时,你就会遇到问题(比如'12'/'3'和'1'/'23')。
NULL
0yg35tkg2#
你可以使用一个子查询。
select count(1) from (select distinct t.column1, t.column2 from schema.table) as t1 ;
vktxenjb3#
试着把它们连起来。
select count(distinct concat(t.column1, t.column2)) from schema.table t
3条答案
按热度按时间mdfafbf11#
模仿这种行为是有点棘手的,最安全的方法可能是:
("order by "这一列并不重要。许多数据库都需要这一列,所以我经常包括它。)
这个版本适用于任何数据库,而不仅仅是db2.问题是,如果任何值是
NULL
,hive不计算一行。问题是,如果任何值是
NULL
,hive就不计算一条记录,这一点考虑到了。在子查询中使用 "select distinct "比较接近,但是它计算 "NULL "值 -- 而且这种改变可能不适合查询中的其他列。
然而当有重叠的值时,你就会遇到问题(比如'12'/'3'和'1'/'23')。
0yg35tkg2#
你可以使用一个子查询。
vktxenjb3#
试着把它们连起来。