Sql 在蜂箱中使用DISTINCT和GROUP BY

Sql 在蜂箱中使用DISTINCT和GROUP BY,sql,group-by,hive,distinct,hiveql,Sql,Group By,Hive,Distinct,Hiveql,我对使用Hive还不熟悉,但我正在尝试打印一个表格,其中包含不同城市的车身类型总数 select body_type, city, count(body_type) AS total_for_body from usedcartestfinal group by body_type, city order by total_for_body DESC LIMIT 20; 当我运行上面的程序时,我得到了一个重复城市的打印结果,我只希望一个城市被打印一次,我想我应该使用SELECT DI

我对使用Hive还不熟悉,但我正在尝试打印一个表格,其中包含不同城市的车身类型总数

 select body_type, city, count(body_type) AS total_for_body
 from usedcartestfinal
 group by body_type, city
 order by total_for_body DESC
 LIMIT 20;
当我运行上面的程序时,我得到了一个重复城市的打印结果,我只希望一个城市被打印一次,我想我应该使用SELECT DISTINCT city,但是我不能,因为我得到了一个错误,Group By不能在同一个查询中使用

不太清楚如何进行此查询,如有任何意见或建议,将不胜感激

以下是我的输出:


我基本上只想让休斯顿打印一次,因为销售最高的是SUV/CROSSOVER

您应该从
group by
条款中删除
车身类型
,并对其进行明确计数:

选择城市,将(不同的主体类型)计算为主体的合计
来自usedcartestfinal
按城市分组
按总订单订购车身描述限值20;

如果您将
车身类型
包括在
分组依据
中,那么它将按照
车身类型
城市
分组,因此对于每个
城市
和每个
车身类型
,您将得到一行

您应该从
分组依据中删除
BODYTYPE
,然后
选择
列表,如下所示:

SELECT * FROM 
(SELECT BODY_TYPE,
       CITY,
       COUNT(DISTINCT BODY_TYPE) AS TOTAL_FOR_BODY,
       ROW_NUMBER() OVER (PARTITION BY CITY 
                          ORDER BY COUNT(DISTINCT BODY_TYPE) DESC) AS RN
  FROM USEDCARTESTFINAL
 GROUP BY BODY_TYPE,
          CITY) AS T WHERE RN = 1
 ORDER BY TOTAL_FOR_BODY DESC LIMIT 20;

使用具有分析行数的子查询来获取每个城市计数最高的记录:

select body_type, city, total_for_body
from
( 
select  body_type, city, total_for_body
        row_number() over(partition by city order by total_for_body desc) rn
from
(
 select body_type, city, count(body_type) total_for_body
 from usedcartestfinal
group by body_type, city
)s
)s where rn = 1

我需要包括body_类型,以显示该城市中body_类型的数量。例如:休斯顿|轿车| 500,但我需要排除同一个城市再次出现,休斯顿| Coupe | 300。我不确定这是否有意义。因此,您只想看到每个城市销量最多的车型的
车身类型
?是这样吗?好的,我使用了分析函数按计数排序,你会在结果中发现每个城市只有一条记录。只打印一次?由于您按两列进行分组,每个城市可以返回多次。如果您只希望每个城市返回一次,您必须决定返回哪个不同的body_类型值。@jarlh这是什么意思?当我运行我的查询时,这就是我得到的,基本上我只想让休斯顿打印一次,因为他们最畅销的是SUV。因此,不太确定如何进行,您是否可以提供表
usedcartestfinal
的示例方案?表中有哪些列以及哪些数据类型?我怀疑后面的数据模型可能是以一种更易于处理的方式创建的,但是如果您刚刚启动SQL,这将是非常难以承受的。我会将
车身类型
城市
存储在不同的表中,并创建第三个关系表。通过简单的连接,查询将更加容易