【问题标题】:Condense multiple rows to single row with counts based on unique values in sqlite根据 sqlite 中的唯一值将多行压缩为单行
【发布时间】:2014-04-05 15:26:39
【问题描述】:

我正在尝试将每个事件包含多行的表压缩为一个较小的表,该表包含每个事件中的关键子事件的计数。事件是基于跨列的唯一组合定义的。

作为一个具体的例子,假设我有以下数据,涉及客户在不同日期访问不同商店并购买不同商品:

cust date   store   item_type
a    1     Main St  1
a    1     Main St  2
a    1     Main St  2
a    1     Main St  2
b    1     Main St  1
b    1     Main St  2
b    1     Main St  2
c    1     Main St  1
d    2     Elm St   1
d    2     Elm St   3
e    2     Main St  1
e    2     Main St  1
a    3     Main St  1
a    3     Main St  2

我想将数据重组为一个表格,该表格包含给定日期的每次客户访问的一行,并具有适当的计数。我正在尝试了解如何使用 SQLite 将其压缩为:

Index   cust   date   store     n_items    item1    item2    item3     item4
1         a      1   Main St        4        1        3        0        0
2         b      1   Main St        3        1        2        0        0
3         c      1   Main St        1        1        0        0        0
4         d      2   Elm St         2        1        0        1        0
5         e      2   Main St        2        2        0        0        0
6         a      3   Main St        2        1        1        0        0

对于这个简单的示例,我可以在 excel 中执行此操作(按照建议的here 以 sumproduct(cutomer * date) 开头,然后是此列上的累积总和以生成索引,然后是 countif 和 countifs 以生成所需的计数)。

Excel 不太适合对数千行执行此操作,因此我正在寻找使用 SQLite 的解决方案。

很遗憾,我的 SQLite 功夫很弱。

我认为this 是我找到的最接近的,但我无法准确理解如何调整它。

当我尝试一种更基本的方法来开始生成唯一索引时:

CREATE UNIQUE INDEX ui ON t(cust, date);

我明白了:

Error: indexed columns are not unique

我将不胜感激任何有关从哪里开始的帮助。非常感谢!

【问题讨论】:

    标签: database excel sqlite


    【解决方案1】:

    要为每个唯一的列值组合创建一个结果记录,请使用 GROUP BY。

    组中的记录数可通过 COUNT 获得。

    要计算特定项目类型,请使用布尔表达式,如 item_type=x,它返回 0 或 1,然后对组中的所有记录求和:

    SELECT cust,
           date,
           store,
           COUNT(*) AS n_items,
           SUM(item_type = 1) AS item1,
           SUM(item_type = 2) AS item2,
           SUM(item_type = 3) AS item3,
           SUM(item_type = 4) AS item4
    FROM t
    GROUP BY cust,
             date,
             store
    

    【讨论】:

    • 这太棒了。我没有意识到在 GROUP BY 语句中使用多个字段的能力,但我认为这有可能解决我正在处理的许多相关问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2018-07-16
    • 2014-12-30
    • 2020-01-26
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多