SQL分组依据和基于其他列中不同值的求和(如果其他列中的值重复,则求和一次)
我需要一组查询的帮助。我的桌子看起来像这样:SQL分组依据和基于其他列中不同值的求和(如果其他列中的值重复,则求和一次),sql,group-by,sum,teradata,distinct,Sql,Group By,Sum,Teradata,Distinct,我需要一组查询的帮助。我的桌子看起来像这样: +--------+---------------------+------------------------+ | PERSON | ITEM_DISTINCT_COUNT | COST_DISTINCT_ITEM_SUM | +--------+---------------------+------------------------+ | A | 2 |
+--------+---------------------+------------------------+
| PERSON | ITEM_DISTINCT_COUNT | COST_DISTINCT_ITEM_SUM |
+--------+---------------------+------------------------+
| A | 2 | 6 |
| B | 2 | 10 |
| C | 1 | 1 |
+--------+---------------------+------------------------+
创建多集表MY_表PERSON CHAR1,ITEM CHAR1,COST INT;
在MY_表中插入值'A','1',5;
在MY_表中插入值'A','1',5;
在MY_表中插入值'A','2',1;
在MY_表中插入值“B”、“3”、0;
在MY_表中插入值'B','4',10;
在MY_表中插入值'B','4',10;
在MY_表中插入值'C','5',1;
在MY_表中插入值'C','5',1;
在MY_表中插入值'C','5',1;
我需要按个人对项目和成本进行分组,但方式不同。对于每个人,我需要他们拥有的独特物品的数量。例:人A有两个不同的项目,项目1和项目2。我可以用COUNTDISTINCT项目得到这个
然后,对于每个人,我需要计算成本的总和,但对于重复的项目,每个不同的项目只需计算一次,成本总是相同的。例:A个人的物品1售价5美元,物品1售价5美元,物品2售价1美元。因为这个人有两次第1项,我数了5美元一次,然后从第2项中加上1美元,总共6美元。输出应如下所示:
+--------+---------------------+------------------------+
| PERSON | ITEM_DISTINCT_COUNT | COST_DISTINCT_ITEM_SUM |
+--------+---------------------+------------------------+
| A | 2 | 6 |
| B | 2 | 10 |
| C | 1 | 1 |
+--------+---------------------+------------------------+
有没有一种简单的方法可以在很多行上都表现良好
选人
,COUNTDISTINCT ITEM ITEM\u DISTINCT\u COUNT
-有助于了解成本_独特_项目_金额
从我的桌子上
分组
我建议采用两级聚合:
select person, count(*) as num_items, sum(cost)
from (select person, item, avg(cost) as cost
from my_table t
group by person, item
) t
group by person;
我建议采用两级聚合:
select person, count(*) as num_items, sum(cost)
from (select person, item, avg(cost) as cost
from my_table t
group by person, item
) t
group by person;
您可以创建一个子查询,获取每个人的项目和成本的不同值,然后在此基础上进行聚合:
SELECT PERSON,
COUNT(ITEM) AS ITEM_DISTINCT_COUNT,
SUM(COST) AS COST_DISTINCT_ITEM_SUM
FROM (
SELECT DISTINCT PERSON, ITEM, COST
FROM MY_TABLE
) M
GROUP BY PERSON
输出:
PERSON ITEM_DISTINCT_COUNT COST_DISTINCT_ITEM_SUM
A 2 6
B 2 10
C 1 1
您可以创建一个子查询,获取每个人的项目和成本的不同值,然后在此基础上进行聚合:
SELECT PERSON,
COUNT(ITEM) AS ITEM_DISTINCT_COUNT,
SUM(COST) AS COST_DISTINCT_ITEM_SUM
FROM (
SELECT DISTINCT PERSON, ITEM, COST
FROM MY_TABLE
) M
GROUP BY PERSON
输出:
PERSON ITEM_DISTINCT_COUNT COST_DISTINCT_ITEM_SUM
A 2 6
B 2 10
C 1 1
Gordon,有没有一种简单的方法可以在不编写sql查询的情况下为此类帖子创建表?我想要一个类似电子表格的工具,它可以让您输入数据并将其转换为SQL以创建表。这样,我就可以少打字了。@ErranMorad。您拥有的insert语句对其他语句最有用—好吧,实际的SQL或DB FIDLE会更有用。@erromorad两者都有,并且有文本到DDL工具,可以实现您想要的功能。Gordon,有没有一种简单的方法可以在不编写SQL查询的情况下为此类帖子创建表?我想要一个类似电子表格的工具,它可以让您输入数据并将其转换为SQL以创建表。这样,我就可以少打字了。@ErranMorad。您拥有的insert语句对其他语句最有用-好吧,实际的SQL或DB FIDLE会更有用一点。@ERMANORAD两者都有,并且有文本到DDL工具可以实现您想要的功能。您的目标系统真的是Teradata吗?TD不支持这种多值语法。@dnoeth它是Teradata。我更新了那段代码,谢谢。你的目标系统真的是Teradata吗?TD不支持这种多值语法。@dnoeth它是Teradata。我更新了那段代码,谢谢。