Database HIVE:GroupBy的行为与MySQL不同

Database HIVE:GroupBy的行为与MySQL不同,database,group-by,hive,Database,Group By,Hive,我有一些MySQL的经验,最近我不得不在HIVE上做一些工作 这两个查询的基本结构非常相似,但配置单元中的GROUPBY的工作方式似乎有点不同。。。因此,我无法实现以前使用GROUPBY在MySQL中实现的功能 下面是我的问题,假设我有一个列为a、B、C的表,我想选择按列a分组的列值最大为B的行。我将执行以下操作: SELECT A, max(B) FROM myTable GROUP BY A 上面的代码可以在HIVE中正常工作。但是如果我还想看到C列中的值,它与max.B值在同一行中,该怎

我有一些MySQL的经验,最近我不得不在HIVE上做一些工作

这两个查询的基本结构非常相似,但配置单元中的GROUPBY的工作方式似乎有点不同。。。因此,我无法实现以前使用GROUPBY在MySQL中实现的功能

下面是我的问题,假设我有一个列为a、B、C的表,我想选择按列a分组的列值最大为B的行。我将执行以下操作:

SELECT A, max(B) FROM myTable GROUP BY A
上面的代码可以在HIVE中正常工作。但是如果我还想看到C列中的值,它与max.B值在同一行中,该怎么办?在MySQL中,我只需执行以下操作:

SELECT A, max(B), C FROM myTable GROUP BY A
但在蜂巢里我不能这么做。它抱怨C不在GROUPBY键中,但如果我将C添加到GROUPBY中,结果完全不是我想要的


那么,在蜂箱中选择这种期望结果的方法是什么呢?有人说在C列上使用collect_集可以解决这个问题,但我不知道collect_集是如何排序的,因此不知道返回哪个元素…

好的,我知道了。。。下面的方法可以解决这个问题:

SELECT A, maxB, C FROM myTable JOIN
(SELECT A, max(B) as maxB FROM myTable GROUP BY A) temp
ON myTable.A = temp.A AND myTable.B = temp.maxB

事实证明,我必须在HIVE中编写更多的代码才能获得与MySQL中的一行代码相同的结果…:

在MySQL中,您只会得到一个随机的C,这似乎不是您所期望的

请参阅MySQL的SQL_模式,以适当地让MySQL也拒绝这种不明确的代码


或者使用MINC,以获得特定的一个

蜂巢拒绝。。。但除了MySQL之外,世界上所有其他数据库也是如此。这不是一个定义良好的查询。例如:如果maxB出现在多个行中,该怎么办?C的哪个值应该被返回?@mdahlman是的,我想也许你是对的…@mdahlman:如果我确定这个maxB发生在多行中,那么在我的用例中不会发生,有解决方法吗?MySQL不会像您建议的那样返回与最大B值在同一行的C列中的值-服务器可以从任何行返回C的任何值。您所建议的语法的唯一一致用法是,如果C对A的每个唯一值都采用唯一的值,否则您将得到未定义的结果。@SagarNikam,那么您能建议一个更好的解决方案吗?