客户表有一个包含项目列表的客户列表。
我们收到了一份排名的项目清单。 因此,我们必须通过总结排名来找出客户排名。
Customer ID| Items | rank
1 | 1 | 1
1 | 1 | 1
1 | 2 | 4
1 | 2 | 4
1 | 3 | 1
期望输出
CustomerID | rank
1 | 6
每个客户都会感到困惑。非常感谢任何帮助!
我正在添加一些标签,如果它们不相关,请原谅!
答案 0 :(得分:2)
对于HANA,查询将如下所示(包含一些测试数据):
create column table "CustomerItems"
("CustomerID" nvarchar(10),
"Items" nvarchar(10),
"CRank" integer
);
insert into "CustomerItems" ("CustomerID", "Items", "CRank") values ('1', '1', 1 );
insert into "CustomerItems" ("CustomerID", "Items", "CRank") values ('1', '1', 1 );
insert into "CustomerItems" ("CustomerID", "Items", "CRank") values ('1', '2', 4 );
insert into "CustomerItems" ("CustomerID", "Items", "CRank") values ('1', '2', 4 );
insert into "CustomerItems" ("CustomerID", "Items", "CRank") values ('2', '1', 3 );
insert into "CustomerItems" ("CustomerID", "Items", "CRank") values ('2', '1', 3 );
insert into "CustomerItems" ("CustomerID", "Items", "CRank") values ('2', '3', 5 );
select "CustomerID", Sum(distinct("CRank"))
from "CustomerItems"
group by "CustomerID"
order by "CustomerID"
我不会使用" Rank"作为列名。这是一个reserved word(窗口函数),可能导致混淆。
对于MySQL,只需将create column table
替换为create table
,将双引号替换为反引号。
如果这回答了您的问题,我还会推荐一些关于SQL的入门书或在线教程。 如果没有,请提供更多信息,创建表格声明等。
评论后修改并更改测试数据:
如果你想总结你的排名"客户/项目的不同组合,尝试这一个(对于MySQL再次反对,而不是双引号,你必须给子查询自己的别名):
select "CustomerID", sum("CRank")
from
(
select distinct "CustomerID", "Items", "CRank"
from "CustomerItems"
)
group by "CustomerID"
order by "CustomerID"