2012-10-06 32 views
1

我有4個表。一個叫藝術家。下面是表的結構:關於這些的SQL問題

artistID lastname firstname nationality dateofbirth datedcease 

其他表稱爲工作

workId title copy medium description artist ID 

跨表

TransactionID Date Acquired Acquistionprice datesold 
askingprice salesprice customerID  workID 

Customer表

customerID lastname Firstname  street  city  state 
zippostalcode  country areacode phonenumber email 

第一個問題是藝術家都有最多的作品artold和有多少藝術家作品已經售出。

我的SQL查詢低於

SELECT * 
FROM dtoohey.artist A1 
INNER JOIN 
    (SELECT 
     COUNT(W1.ArtistID) AS COUNTER, artistID 
    FROM dtoohey.trans T1 
    INNER JOIN dtoohey.work W1 ON W1.workid = T1.Workid 
    GROUP BY W1.artistID) TEMP1 ON TEMP1.artistID = A1.artistID 
WHERE 
    A1.artistID = TEMP1.artistId 
ORDER BY 
    COUNTER desc; 

我對整個事件表,但我想只顯示第一行是最高計數 - 我該怎麼做?

qns 2是藝術家作品的銷售量最高的平均利潤(即藝術家每次銷售作品的平均利潤),這是多少。

我的SQL查詢低於

SELECT 
    A1.artistid, A1.firstname 
FROM 
    (SELECT 
     (salesPrice - AcquisitionPrice) as profit, 
     w1.artistid as ArtistID 
    FROM dtoohey.trans T1 
    INNER JOIN dtoohey.WORK W1 ON W1.workid = T1.workid) TEMP1 
INNER JOIN 
    dtoohey.artist A1 ON A1.artistID = TEMP1.artistID 
GROUP BY 
    A1.artistid 
HAVING 
    MAX(PROFIT) = AVG(PROFIT); 

我不能執行它

+0

MySQL和Oracle使用不同的語法來解決這些類型的問題。你真的在尋找一個適用於這兩種RDBMS的答案嗎? – APC

回答

0

使用limit 1你的拳頭問題

+0

我使用了限制1,但它仍然無法工作讓你建議放在哪裏? – user1692068

+0

後,你的'ORDER BY COUNTER desc'條款 – Abubakkar

+0

HI它不工作 – user1692068

0

你的第二個問題是可以精確求解同爲第一一。只需更換

COUNT(W1.ArtistID) 

AVG(salesPrice - AcquisitionPrice) as AvgProfit 

,然後使用:

ORDER BY AvgProfit DESC 
LIMIT 1 

完整的查詢應該是:

SELECT A1.artistid, A1.firstname, TEMP1.avgProfit 
FROM (SELECT AVG(salesPrice - AcquisitionPrice) as avgProfit, W1.artistid as artistid 
     FROM dtoohey.trans T1 
     INNER JOIN dtoohey.WORK W1 
     ON W1.workid = T1.workid 
     GROUP BY artistid 
     ORDER BY avgProfit DESC 
     LIMIT 1) TEMP1 
INNER JOIN dtoohey.artist A1 
ON A1.artisid = TEMP1.artistid 
+0

你好,我真的明白你能打出來嗎? – user1692068

+0

添加完整的查詢來回答。 – Barmar

+0

有錯誤缺少右括號 – user1692068