按照与相同(然后不同)作曲家相同的标题进行分组

时间:2013-09-23 15:30:52

标签: sql oracle

我有两个数据库表,

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

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

是我用于此查询的那些。

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

我试过了:

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(*);

2 个答案:

答案 0 :(得分:0)

尝试替换您的查询:

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

答案 1 :(得分: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中的窗口函数。