合并一列的值并汇总第二列中的值
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 BY
和 SUM
。
此外,为了清楚起见,我推荐使用 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;
我是 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 BY
和 SUM
。
此外,为了清楚起见,我推荐使用 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;