如何获取列中值的不同计数



我有一个表,它的两个列看起来像这样:

Name        cars_owned
Adam        Audi
David       BMW
Steve       Ford
John        Audi
Adam        Audi
....This continues on for ~1,000 rows

我想要这样的输出:

cars_owned     count
Audi           3
BMW            1
Ford           1
...

问题是行可以重复,这意味着'Adam'和'Audi'可能一起出现100次,但对于名称'Adam',我希望它只是作为奥迪计数的一个,无论它在表中出现多少次。此外,"Adam"可能与"Audi"一起出现了20次,但也可能与"BMW"一起出现了5次,在这种情况下,我希望"Adam"只出现在Audi计数中,因为Audi出现的次数比BMW多。

我能够使用以下代码获得不同名称的计数(247):

SELECT COUNT(DISTINCT Name)
FROM cars_table

现在我只需要将这247个不同的名称分解为正确的cars_owned类别,以获得计数

您需要每个名称的最常见的值,然后是分布。使用两个级别的聚合:

select car, count(*) as num_names, sum(cnt) as num_cars
from (select name, car, count(*) as cnt,
row_number() over (partition by name order by count(*) desc) as seqnum
from cars c
group by name, car
) nc
where seqnum = 1
group by car;

注意:如果一个名字有最常见的车,这将返回一个任意值。

相关内容

  • 没有找到相关文章

最新更新