合并一列的值并汇总第二列中的值

Merging values for one column and summing up the values in the second column

我是 Oracle 的新手 SQL。我正在尝试对大约三个表执行操作。基本上,我有三个表:Artist、Transaction、Work。我正在尝试检索售出最多艺术品的艺术家。当我 运行 查询时,我得到了重复的值,而且我不完全确定如何合并列。

这是我最初执行的查询

SELECT FIRSTNAME || '' || LASTNAME AS ARTISTNAME, TITLE, SALESPRICE
FROM DTOOHEY.ARTIST A, DTOOHEY.WORK W, DTOOHEY.TRANS T
WHERE A.ARTISTID = W.ARTISTID
AND W.WORKID = T.WORKID
AND DATESOLD IS NOT NULL;

Here is the result. 我想要实现的是合并艺术家姓名,然后汇总他们的销售价格。例如,对于艺术家 Joan Miro,我希望它只显示一个值 "Joan Miro",销售价格是合并行的总和 (400+200 = 600)。所以像

Artist Name | SalesPrice    

Joan Miro   | 600

这可能吗?我不完全确定如何使用 MERGE 函数,我不确定这是否是我需要在这里使用的。

编辑:

抱歉,忘了说我确实用过GROUP BY。我也试过这个查询:

SELECT FIRSTNAME || '' || LASTNAME AS ARTISTNAME, TITLE, SUM(SALESPRICE)
FROM DTOOHEY.ARTIST A, DTOOHEY.WORK W, DTOOHEY.TRANS T
WHERE A.ARTISTID = W.ARTISTID
AND W.WORKID = T.WORKID
AND DATESOLD IS NOT NULL
GROUP BY FIRSTNAME, LASTNAME;

我收到一条错误消息:

ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"
*Cause:    
*Action:
Error at Line: 42 Column: 51

您需要使用 GROUP BYSUM

此外,为了清楚起见,我推荐使用 ANSI 连接语法。

SELECT FIRSTNAME || '' || LASTNAME AS ARTISTNAME, SUM(SALESPRICE) AS TOTAL_SALESPRICE
FROM DTOOHEY.ARTIST A
JOIN DTOOHEY.WORK W ON A.ARTISTID = W.ARTISTID
JOIN DTOOHEY.TRANS T ON W.WORKID = T.WORKID
WHERE DATESOLD IS NOT NULL
GROUP BY FIRSTNAME, LASTNAME;

这正是 group by 子句的用途。它允许您指定哪些列应该定义一组行(在您的例子中是艺术家的名字和姓氏),并让您在其他列上应用一些聚合函数(在您的例子中是求和)。即:

SELECT   FIRSTNAME || '' || LASTNAME AS ARTISTNAME, SUM(SALESPRICE)
FROM     DTOOHEY.ARTIST A, DTOOHEY.WORK W, DTOOHEY.TRANS T
WHERE    A.ARTISTID = W.ARTISTID AND
         W.WORKID = T.WORKID AND
         DATESOLD IS NOT NULL
GROUP BY FIRSTNAME, LASTNAME;

一般评论:
隐式连接(在 from 子句中有多个表)已被认为已弃用,并且多年来不被推荐。您可能应该使用显式连接子句:

SELECT   FIRSTNAME || '' || LASTNAME AS ARTISTNAME, SUM(SALESPRICE)
FROM     DTOOHEY.ARTIST A
JOIN     DTOOHEY.WORK W ON A.ARTISTID = W.ARTISTID
JOIN     DTOOHEY.TRANS T ON W.WORKID = T.WORKID
WHERE    DATESOLD IS NOT NULL
GROUP BY FIRSTNAME, LASTNAME;