2012-10-06 30 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