为什么Distinct *不起作用,而count(Distinct *)起作用?

问题描述 投票:3回答:1

有一张桌子(IN HIVE)示例-meanalytics.key2_master_ids该表有6列(cmpgn_id,offr_id,exec_id,creatv_id,cmpl_dt,mkt_cd),并且可能有重复项(重复行)

现在这些是我运行的以下查询

1)hc.sql("Select count(*) from meanalytics.key2_master_ids").show()
- +--------+
|count(1)|
+--------+
|  688919|
+--------+
2)hc.sql("Select count(distinct *) from meanalytics.key2_master_ids").show()

|count(DISTINCT cmpgn_id, offr_id, exec_id, creatv_id, cmpl_dt, mkt_cd)|
+----------------------------------------------------------------------+
|                                                                589808|

从这两个查询中,我推断出该表具有重复的行。

现在我使用不同的*选择不同的行并查看计数

3)hc.sql("Select count(*) from (Select distinct * from meanalytics.key2_master_ids)").show()
+--------+
|count(1)|
+--------+
|  688919|
+--------+

正如您所看到的,使用不同的((688919))是相同的普通count()(688919),但是当我使用count(distinct *)(589808)时,它是不同的。有人可以解释一下结果吗?请吗?

编辑1)还尝试通过提供所有6个列名来显式选择所有不同的值,即使在计数为688919而不是计数(distinct *)]时得到的589808也是如此

hc.sql("Select count(*) from (Select distinct cmpgn_id,offr_id,exec_id,creatv_id,cmpl_dt,mkt_cd from meanalytics.key2_master_ids)").show()

+--------+
|count(1)|
+--------+
|  688919|
+--------+

[有一个表(IN HIVE)示例-meanalytics.key2_master_ids此表有6列(cmpgn_id,offr_id,exec_id,creatv_id,cmpl_dt,mkt_cd),可能现在有重复项(重复行)...

mysql sql hive hiveql
1个回答
0
投票

原因是COUNT(*)在MySQL中是一种特殊情况。从manual

© www.soinside.com 2019 - 2024. All rights reserved.