2017-04-17 110 views
0

聲明:我怎樣才能做到這一點Oracle查詢

SERIES: 
title   
total_seasons 

SEASONS: 
title   
season  
avgduration 
episodes 
PRIMARY KEY (title, season), 
FOREIGN KEY (title) REFERENCES SERIES 

LIC_SERIES: 
id_client 
datetime 
title 
season 
episode 
PRIMARY KEY (client,title,season,episode) 
FOREIGN KEY (title,season) REFERENCES seasons 

系列例子是這樣的:

Title  Total_Seasons 
House  8 
Lost  6 

四季如

表 「誰購買了全套系列許可證的客戶」看起來像這樣:

Title Season AvgDuration Episodes 
House 1  44   22 
Mad Men 3  47   13 

Lic_Series例子是這樣的:

Client Datetime Title Season Episode 
92/657/T 01/01/2017 House 8  18 

我試過嗎?

WITH PART AS (SELECT DISTINCT EPISODES, TITLE 
FROM SEASONS INNER JOIN SERIES 
ON Seasons.Title = Series.Title 
GROUP BY Seasons.Title) 

SELECT CLIENT 
FROM LIC_SERIES INNER JOIN PART 
ON LIC_SERIES.TITLE = PART.TITLE 
ORDER BY title DESC; 

我不知道如何檢查,如果一個客戶有所有每個賽季

+1

GROUP BY無效。一般的GROUP BY規則說:如果指定了GROUP BY子句,SELECT列表中的每個列引用必須標識一個分組列或者是一個set函數的參數。 – jarlh

+0

爲什麼GROUP BY在不涉及集合函數時?而SELECT DISTINCT與GROUP BY結合在一起也很少有用 - 只適用於有經驗的用戶! – jarlh

+0

添加更多樣本表數據,以及其預期結果。 – jarlh

回答

0

這將返回所有和沒有發作的次數所擁有的情節,並且有問題的一系列的四季由每個季節的每個客戶。要檢查是否擁有所有劇集,請對episodes_not_owned爲零的摘要執行額外的檢查。

WITH PART AS 
(SELECT DISTINCT s2.TITLE, s1.SEASON, s2.EPISODE 
FROM SEASONS s1 
INNER JOIN SERIES s2 
ON s1.Title = s2.Title 
) 
,summary as (
SELECT l.CLIENT 
     ,p.SEASON 
     ,SUM(CASE WHEN l.episode is not null THEN 1 ELSE NULL END) as episodes_owned 
     ,SUM(CASE WHEN l.episode is null THEN 1 ELSE NULL END) as episodes_not_owned 
FROM LIC_SERIES l 
RIGHT OUTER JOIN PART p 
ON l.TITLE = p.TITLE 
AND l.EPISODE = p.EPISODE 
AND l.SEASON = p.SEASON 
GROUP BY l.CLIENT, p.SEASON 
ORDER BY l.CLIENT, p.SEASON DESC 
) 
SELECT s.client 
     ,s.season 
     ,s.episodes_owned 
     ,s.episodes_not_owned 
     ,case when s.episodes_not_owned = 0 THEN 'Yes' ELSE 'No' END as all_owned 
from summary s; 
+0

它說:'錯誤SQL:ORA-00904:「S1」。「EPISODE」:無效標識符 00904. 00000 - 「%s:無效標識符」 *原因: *操作:'@Jeremy Real – Junior

+0

@Junior I已經更新,從s2而不是s1中拉開情節。引用了錯誤的表格。您的表格描述調用字段'episodes',但您的查詢使用'episode'。如果它應該是複數,您可能需要更新該字段名稱。 –

+0

你是對的複數。現在錯誤是與S2! xD'錯誤SQL:ORA-00904:「S2」。「EPISODE」:無效標識符 00904. 00000 - 「%s:無效標識符」 *原因: *行動:'但是,好吧,我認爲我可以用這個(讓希望) – Junior

相關問題