首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中计数组合的递归

在SQL中计数组合的递归
EN

Stack Overflow用户
提问于 2020-10-05 15:03:00
回答 1查看 134关注 0票数 0

我有一份物品清单(如衬衫、上衣、裤子、阿迪达斯、耐克、美洲狮、口红、面部粉刷等)。我把它们归类为(衬衫,上衣,裤子=衣服,耐克,阿迪达斯,美洲豹=鞋子,口红等等=化妆),以及类似于2017-01-01的年份。我想知道在同一天有多少次有两种类型的采购,例如,如果我在2018-02-01购买化妆品和衣服,那么我想把它计算为1作为‘化妆+衣服’类别的1,如果我在2017-09-06年度购买鞋子和化妆品,那么我想把它算为‘鞋子+化妆’类别的1。

我该怎么做?

我有下表,名为项目:

代码语言:javascript
复制
Year | Purchases | 
------------------
2017-02-01 | makeup
2018-10-01 | shoes
2019-03-01 | makeup
2017-11-01 | shoes
2017-02-01 | clothing
2016-01-01 | shoes
2018-10-01 | clothing
2017-11-01 | clothing
2019-01-01 | makeup
2016-01-01 | makeup

所需的输出如下所示:

代码语言:javascript
复制
Year | Purchases        | Count
-----------------------
2016 | Shoes + makeup   |  1
2017 | Makeup +clothing |  1
2017 | shoes + Clothing |  2
2018 | Shoes + clothing |  1
...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-05 15:06:04

下面是一种使用自连接和聚合的方法:

代码语言:javascript
复制
select extract(year from t1.date) yr, t1.purchases purchases_1, t2.purchases purchases_2, count(*) cnt
from mytable t1
inner join mytable t2 on t2.date = t1.date and t2.purchases < t1.purchases
group by extract(year from t1.date), t1.purchases, t2.purchases

每年,这统计了两种产品在同一天出现的次数。

备注:

  • 存储日期的列应该被称为year,这是违反直觉的;我在查询

中将它重命名为date

alternatives

  • 您没有告诉您正在运行的是哪个数据库;这使用标准函数extract()来获取每个日期的年份--不是所有数据库都支持该函数,但它们都有

  • 查询将项放在两个单独的列中--您可以将它们连接在您的同一列中,比如

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64211244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档