【发布时间】:2020-12-30 12:12:30
【问题描述】:
我需要有关分组查询的帮助。我的桌子是这样的:
CREATE MULTISET TABLE MY_TABLE (PERSON CHAR(1), ITEM CHAR(1), COST INT);
INSERT INTO MY_TABLE VALUES ('A', '1', 5);
INSERT INTO MY_TABLE VALUES ('A', '1', 5);
INSERT INTO MY_TABLE VALUES ('A', '2', 1);
INSERT INTO MY_TABLE VALUES ('B', '3', 0);
INSERT INTO MY_TABLE VALUES ('B', '4', 10);
INSERT INTO MY_TABLE VALUES ('B', '4', 10);
INSERT INTO MY_TABLE VALUES ('C', '5', 1);
INSERT INTO MY_TABLE VALUES ('C', '5', 1);
INSERT INTO MY_TABLE VALUES ('C', '5', 1);
+--------+------+------+
| PERSON | ITEM | COST |
+--------+------+------+
| A | 1 | 5 |
| A | 1 | 5 |
| A | 2 | 1 |
| B | 3 | 0 |
| B | 4 | 10 |
| B | 4 | 10 |
| C | 5 | 1 |
| C | 5 | 1 |
| C | 5 | 1 |
+--------+------+------+
我需要按人对项目和成本进行分组,但方式不同。对于每个人,我需要他们拥有的独特物品的数量。例如:A 的人有两个不同的项目,项目 1 和项目 2。我可以通过 COUNT(DISTINCT ITEM) 得到这个。
然后对于每个人,我需要对成本求和,但每个不同的项目只需要一次(对于重复的项目,成本始终相同)。例如:人 A 有 5 美元的项目 1、5 美元的项目 1 和 1 美元的项目 2。由于这个人有两次物品 1,我算了一次 5 美元,然后将物品 2 中的 1 美元相加,总共 6 美元。输出应如下所示:
+--------+---------------------+------------------------+
| PERSON | ITEM_DISTINCT_COUNT | COST_DISTINCT_ITEM_SUM |
+--------+---------------------+------------------------+
| A | 2 | 6 |
| B | 2 | 10 |
| C | 1 | 1 |
+--------+---------------------+------------------------+
有没有一种简单的方法可以在很多行上表现良好?
SELECT PERSON
,COUNT(DISTINCT ITEM) ITEM_DISTINCT_COUNT
-- help with COST_DISTINCT_ITEM_SUM
FROM MY_TABLE
GROUP BY PERSON
【问题讨论】:
-
您的目标系统真的是 Teradata 吗? TD 不支持这种多值语法。
-
@dnoeth 它是 Teradata。我更新了那段代码,谢谢。
标签: sql group-by sum teradata distinct