2013-11-27 64 views
1

我有2個表,獲取供應商名稱,其中提供的所有物品都高於平均水平

SUPPLIERS(
    SUPPCODE, 
    SUPPNAME, 
    STREET, 
    TOWN, 
    COUNTRY, 
    POSTCODE, 
    TELNO, 
    FAXNO) 

STOCKS(
    STOCKNO, 
    STORECODE, 
    DESCRIPTION, 
    QUANTITY, 
    UNITS, 
    REORDER, 
    PRICE, 
    SUPPCODE) 

我想找到所有他們提供的商品的價格比平均水平更高的供應商的名稱表中所有項目的價格。

我知道我可以使用

SELECT S1.SuppCode, S1.SuppName, S1.PostCode 
FROM Suppliers S1, Stocks S2 
WHERE Price > (
    SELECT AVG(Price) 
    FROM Stocks 
    ) 
AND S1.SuppCode = S2.SuppCode; 

發現高於平均水平的所有項目,但我不知道如何確保對供應商的每一項是大於平均值。

平均是

AVG(PRICE)                  
----------                  
5.14411765 

而且表看起來像這樣

SQL> select suppcode, price 
    2 from stocks 
    3 order by suppcode 
    4 ; 

SUPPCO  PRICE                
------ ----------                
S1   2.85                
S1   2.85                
S1   2.14                
S1   .49                
S1   .98                
S1   1.59                
S1   1.84                
S1   1.35                
S2   5.15                
S2   2.98                
S2   11.38                

SUPPCO  PRICE                
------ ----------                
S2   12.85                
S3   2.57                
S3   4.95                
S3   1.89                
S3   4.11                
S3   8.58                
S3   1.97                
S3   .81                
S3   6.19                
S3   3.65                
S4   4.83                

SUPPCO  PRICE                
------ ----------                
S4   2.42                
S4   .22                
S4   .45                
S4   .47                
S4   .42                
S4   2.15                
S4   3.48                
S5   7.99                
S5   7.85                
S5   6.47                
S6   23.99                

SUPPCO  PRICE                
------ ----------                
S6   32.99                

因此,考慮這一點,我想S5和S6。

+0

如果我正確理解問題,他想知道僅銷售平均價格高於平均價格的供應商的名稱 – Armunin

+1

就像下次建議一樣,只要您有SQL問題,請提供SQLFiddle與數據。只需訪問http://sqlfiddle.com/並使用您的數據創建一個表。然後在問題中發佈鏈接。這將幫助我們嘗試回答您的問題,向您展示您的數據如何查詢。 –

回答

1

SQL Fiddle

的Oracle 11g R2架構設置

CREATE TABLE SUPPLIERS(
    SUPPCODE NUMBER(5,0) PRIMARY KEY, 
    SUPPNAME VARCHAR2(20), 
    STREET VARCHAR2(20), 
    TOWN  VARCHAR2(20), 
    COUNTRY VARCHAR2(20), 
    POSTCODE VARCHAR2(20), 
    TELNO NUMBER(11,0), 
    FAXNO NUMBER(11,0) 
); 

CREATE TABLE STOCKS(
    STOCKNO  NUMBER(5,0) PRIMARY KEY, 
    STORECODE VARCHAR2(20), 
    DESCRIPTION VARCHAR2(20), 
    QUANTITY NUMBER(5,0), 
    UNITS  NUMBER(5,0), 
    REORDER  NUMBER(5,0), 
    PRICE  NUMBER(12,2), 
    SUPPCODE NUMBER(5,0), 
    FOREIGN KEY (SUPPCODE) REFERENCES SUPPLIERS (SUPPCODE) 
); 

查詢1

SELECT SUPPCODE 
FROM SUPPLIERS s 
WHERE NOT EXISTS (SELECT 1 
        FROM STOCKS k 
        WHERE s.SUPPCODE = k.SUPPCODE 
        AND price <= (SELECT AVG(price) AS avg_price FROM STOCKS) 
       ) 

Results

+0

這工作完美,謝謝! – user3041742

相關問題