如何计算列表中的不同值

时间:2019-05-02 01:11:57

标签: sql snowflake

我对于在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"]

这是我希望输出看起来像的样子: (希望能按desc顺序自动填充不同的任务列表)

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

2 个答案:

答案 0 :(得分:0)

评论太长,但需要您指导以进行研究,然后尝试编写示例查询。虽然您有机会在学习时这样做,但我会调查Data Normalization并调整您的“任务”列。

您应该有一个辅助查找表,该表具有一个主键ID和每个唯一任务的描述(您将在数据规范化中看到)。因此,您可以从数据上下文到文档继续学习,我将提供布局示例并查看如何为您提供帮助。

从查找任务表开始...

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

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

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

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

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 :(得分:0)

步骤1:定义规范化的数据架构,并将其放入数据库中。

您的规范化数据架构可能看起来像这样:

enter image description here

第2步:添加数据

步骤3:然后,您将能够将SQL COUNT与DISTINCT一起使用来在数据表中查找唯一行

SQL COUNT with DISTINCT