2015-11-27 273 views
1

我目前運行的SQL語句在我SELECT語句檢索`每個國家」Oracle數據庫SQL查詢

不過,我目前硬編碼的國名的競爭對手贏得了總獎金如下:

SELECT C2.NATIONALITY, SUM(C2.TOTALPRIZEMONEY) AS TOTALPRIZEMONEY 
FROM COMPETITOR C2, COMPETITION C1 
WHERE NATIONALITY IN ('USA','AUSTRALIA','SINGAPORE') 
AND C1.TIMEPLANNED BETWEEN TO_DATE('01-JAN-15') AND TO_DATE ('31-DEC-15') 
GROUP BY NATIONALITY; 

我可以知道如何刪除在聲明中聲明國家/地區名稱的部分,並使用查詢檢索所有可用的國家/地區?

下面是我的表結構:

enter image description here

+2

你有這個國家。我知道你可以使用'NATIONALITY IN'(從表中選擇國家)' – PK20

+0

SELECT C2.NATIONAL,SUM(C2.TOTALPRIZEMONEY)AS TOTALPRIZEMONEY FROM COMPETITOR C2,COMPETITION C1 'COUNTRY COUNTRY COUNTRY'COUNTRY_TABLE' 並在TO_DATE('01 -JAN-15')和TO_DATE('31-DEC-15')之間進行C1.TIMEPLANNED GROUP BY NATIONALITY; –

回答

2

您可以使用競爭表(國家/地區欄)獲取所有潛在國家(並使用group by獲取不同的值)。

SELECT C2.NATIONALITY, SUM(C2.TOTALPRIZEMONEY) AS TOTALPRIZEMONEY 
FROM COMPETITOR C2, COMPETITION C1 
WHERE NATIONALITY IN (SELECT COUNTRY FROM COMPETITION GROUP BY COUNTRY) 
AND C1.TIMEPLANNED BETWEEN TO_DATE('01-JAN-15') AND TO_DATE ('31-DEC-15') 
GROUP BY NATIONALITY; 
+0

在這個varian查詢應該使用***連接***而不是***在***: – HAYMbl4

+0

在子查詢中使用GROUP BY實際上沒有意義('(SELECT COUNTRY FROM COMPETITION GROUP BY COUNTRY)'位) - 根據我的經驗,大多數情況下,消除子查詢中的重複項目或者什麼也不做,或者降低性能。 – marmarta

2

在這裏,在這兩個表,我不能看到這些表定義的外鍵。必須有一些其他表將包含映射。 如果它不存在,那麼您將無法獲得正確的輸出,因爲它會給您提供交叉產品。

1

你可以試試這段代碼。假設沒有其他的表具有適合國籍的映射,下面的代碼將僅取得競爭者表中存在的不同國籍。

SELECT C2.NATIONALITY, 
    SUM(C2.TOTALPRIZEMONEY) AS TOTALPRIZEMONEY 
FROM COMPETITOR C2, 
    COMPETITION C1 
WHERE NATIONALITY IN 
    (SELECT DISTINCT c3.NATIONALITY FROM COMPETITOR c3 
) -- Assuming there is not separate table/mapping present for this 
AND C1.TIMEPLANNED BETWEEN TO_DATE('01-JAN-15') AND TO_DATE ('31-DEC-15') 
GROUP BY NATIONALITY; 
1

如果列COMPETITOR.NATIONALITYCOMPETITION.COUNTRY conaits一些信息,您可以使用如下查詢:

在表
select cr.nationality, 
    sum(cr.totalprizemoney) 
from competitor cr 
where cr.nationality in 
    (
     select cn.country 
     from competition cn 
     where cn.timeplanned between to_date('01-JAN-15') and to_date ('31-DEC-15') 
    ) 
group by cr.nationality;