SQL:如何仅使用在两列之间具有一定数量的唯一组合的数据?
Posted
技术标签:
【中文标题】SQL:如何仅使用在两列之间具有一定数量的唯一组合的数据?【英文标题】:SQL: How do I use only data that has a certain amount of unique combinations between two columns? 【发布时间】:2018-03-22 01:35:27 【问题描述】:假设我有三列,make、year 和 msrp,我只想在那里显示 make/year 组合数量超过的行,例如 10。这是因为有些品牌只有一年的数据,并且我不希望我的数据中有随机的汽车制造商。
我能够获得每个品牌的年份/品牌组合数,但我不知道如何包含其他列。 我有疑问:
SELECT 品牌、计数(DISTINCT 年份)
来自汽车
按品牌分组
它给出了这样的东西:
make | count
--------------
Honda | 13
Ford | 17
Bugatti | 3
...
但我想要类似的东西:
make | count | year | msrp
----------------------
Honda | 13 | 2001 | 100
Honda | 13 | 2002 | 200
Honda | 13 | 2003 | 300
Ford | 17 | 2001 | 100
Ford | 17 | 2002 | 200
Ford | 17 | 2003 | 300
Bugatti | 1 | 2014 | 1000
并且只显示计数 > 一个数字(可能是 10)的行 * 数据示例组成*
【问题讨论】:
什么是 DBMS?提供一些样本数据 @D-Shih 我正在使用 data.world 编写查询。我把csv放在我的github上供你访问github.com/SudeepS97/cars-csv/blob/master/cars.csv 【参考方案1】:我怀疑你并不需要count(distinct)
。所以,要获取信息:
select make, year, msrp,
count(*) over (partition by make) as num_make_years
from cars;
如果要过滤,则使用子查询:
select my.*
from (select make, year, msrp,
count(*) over (partition by make, year) as num_make_years
from cars
) my
where num_make_years > 10;
【讨论】:
【参考方案2】:SELECT make, count(DISTINCT year) OVER (PARTITION BY make) "Count", year, msrp
FROM cars
GROUP BY make, year, msrp
HAVING count(make) > 10 and count(year) > 10
【讨论】:
这没有达到我想要的效果。不过感谢您的帮助! 尝试添加分区方式以上是关于SQL:如何仅使用在两列之间具有一定数量的唯一组合的数据?的主要内容,如果未能解决你的问题,请参考以下文章