【问题标题】:Counting recurrences of combinations in SQL在 SQL 中计算组合的重复次数
【发布时间】:2020-10-05 15:03:00
【问题描述】:

我有一个物品清单(例如衬衫、上衣、裤子、阿迪达斯、耐克、彪马、口红、洗面奶等),我将它们分类为(衬衫、上衣、裤子 = 衣服、耐克、阿迪达斯、彪马 ​​=鞋子,口红等=化妆)和像这样的格式的年份 2017-01-01。我想知道在同一日期有多少次购买两种类型的商品,例如,如果我在 2018-02-01 购买了化妆品和衣服,那么我想将“化妆品 + 衣服”这一类别计为 1,如果我在 2017 年 9 月 6 日购买了鞋子和化妆品,那么我想将其计为“鞋子 + 化妆品”类别的 1

我该怎么做?

我有一个名为 Items 的表格:

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

想要的输出是这样的:

Year | Purchases        | Count
-----------------------
2016 | Shoes + makeup   |  1
2017 | Makeup +clothing |  1
2017 | shoes + Clothing |  2
2018 | Shoes + clothing |  1
...

【问题讨论】:

  • 请在您的问题上标记数据库名称。 SQL 函数是高度特定于供应商的。

标签: sql group-by count aggregate-functions


【解决方案1】:

这是使用自联接和聚合的一种方法:

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

  • 你没有告诉你正在运行哪个数据库;这使用标准函数 extract() 来获取每个日期的年份 - 并非所有数据库都支持此函数,但它们都有替代方法

  • 查询将项目放在两个单独的列中 - 您可以将它们连接到您喜欢的同一列中

【讨论】:

    猜你喜欢
    • 2019-06-09
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2016-04-21
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多