Sql 在蜂箱中使用DISTINCT和GROUP BY
我对使用Hive还不熟悉,但我正在尝试打印一个表格,其中包含不同城市的车身类型总数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
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,这将是非常难以承受的。我会将车身类型
和城市
存储在不同的表中,并创建第三个关系表。通过简单的连接,查询将更加容易