如何计算列表中的不同值

How to count distinct values in a list

我对在 Snowflake 中编写查询还很陌生,运行 遇到了小问题。我正在尝试计算一个项目在同一列的列表中出现的次数。

我能够使用 flatten 函数,然后尝试添加 count 函数,但没有成功。

这是我的数据的虚拟版本:

Ticket#              Tasks 
1               ["cut apple","peel orange","slice cheese"]
2               ["slice cheese","peel orange"]
3               ["cut apple"]
4               ["cut apple","slice cheese"]
5               ["cut apple", "chop kiwi"]

这是我希望输出的样子: (希望按降序顺序自动填充不同的任务列表)

Tasks               Quantity
Cut Apple               4
Slice Cheese            3
Peel Orange             2
Chop Kiwi               1

评论太长,但您可以查看指导,然后尝试编写示例查询。虽然您有机会在学习的同时这样做,但我会调查 Data Normalization 并调整您的 "Tasks" 列。

您应该进行二次查找 table,其中包含主键 ID 和每个唯一任务的描述(您将在数据规范化中看到)。因此,您可以从数据上下文到文档,我将提供布局示例,看看它对您有何帮助。

从查找任务开始table...

Tasks Table
TaskID   TaskDescription
1        cut apple
2        peel orange
3        slice cheese
4        chop kiwi

然后,您将有另一个 table 具有 TicketID,第三个 table 显示每个 TicketID 的多条记录。

Ticket Table
TicketID  ExPurchaseDate
1         someDate
2         sameDate
3         etc...

现在,每张票的详细信息 table。

TicketTasks Table
TicketTaskID  TicketID   TaskID
1             1          1
2             1          2
3             1          3
4             2          3
5             2          2
6             3          1
7             4          1
7             4          3
8             5          1
9             5          4

尝试通过规范化来消化这些,然后研究使用 COUNT(*) 和 GROUP BY 编写 sql 查询。非常乐意在之后为您提供更多帮助,但希望这些帮助能为您提供一些帮助。

第 1 步:定义规范化数据模式并将该模式​​放入数据库。

您的规范化数据架构可能如下所示:

第 2 步:添加您的数据

第 3 步:然后您将能够使用 SQL COUNT 和 DISTINCT 来查找数据中的唯一行 table(s)

SQL COUNT with DISTINCT