0

我有两个数据库表,

PIECE (PNo, CNo, Title, Tune, Opus)

COMPOSER (CNO, LAST, FIRST, BORN, DIED) 

是我用于此查询的那些。

我需要选择相同且具有相同作曲家的标题。我需要列出每个标题和版本的数量。如果作曲家不同,下一个问题需要相同的清单。

我试过了:

SELECT TITLE, COUNT(*) 
FROM PIECE, COMPOSER
WHERE PIECE.CNo = COMPOSER.CNo
GROUP BY TITLE 
HAVING COUNT(*) > 1 
ORDER BY COUNT(*);

但是,该查询有问题。我正在使用 SQLPLUS。任何帮助表示赞赏。

在回答这个问题之前的问题查询:“不同的音乐作品(具有不同的 PNo)可能具有完全相同的标题,列出这些音乐作品的标题。列出这些音乐标题,以及版本的数量(音乐的件)有共享相同的标题。”

我用了:

SELECT TITLE, COUNT(*) 
FROM PIECE
GROUP BY TITLE 
HAVING COUNT(*) > 1 
ORDER BY COUNT(*);
4

2 回答 2

0

尝试这个:

SELECT TITLE, COUNT(*) 
FROM PIECE
GROUP BY TITLE 
HAVING COUNT(*) > 1 
MINUS
SELECT TITLE, count(*)
FROM PIECE P2 
JOIN COMPOSER  C2 ON P2.CNO = C2.CNO 
GROUP BY TITLE, C2.CNO
HAVING COUNT(*) > 1

我们找到所有出现多次的标题,然后减去所有标题版本中具有相同作曲家的标题。如果您需要更多数据而不仅仅是标题,请返回作曲家表以获取该标题的更多详细信息。我们还可以考虑 Oracle 中的窗口函数。

于 2013-09-23T18:50:05.040 回答
0

尝试像这样替换您的查询:

SELECT TITLE, COUNT(*) as Count
FROM PIECE, COMPOSER
WHERE PIECE.CNo = COMPOSER.CNo
GROUP BY TITLE 
HAVING COUNT(*) > 1 
ORDER BY count;
于 2013-09-23T15:38:13.590 回答