【问题标题】:SQL questions on these关于这些的 SQL 问题
【发布时间】:2012-10-06 10:23:06
【问题描述】:

我有 4 张桌子。一种叫做艺术家。这是表结构:

artistID   lastname   firstname   nationality   dateofbirth   datedcease

另一个表叫做work

workId   title   copy   medium   description   artist ID

转表

TransactionID   Date Acquired   Acquistionprice   datesold 
askingprice    salesprice    customerID     workID

客户表

customerID    lastname    Firstname     street     city     state 
zippostalcode     country    areacode    phonenumber    email

第一个问题是哪位艺术家的作品售出最多,以及该艺术家的作品已售出多少。

下面是我的 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);

我无法执行它

【问题讨论】:

  • MySQL 和 Oracle 使用不同的语法来解决这些类型的问题。您是否真的在寻找一种适用于两种 RDBMS 风格的答案?

标签: mysql sql oracle top-n


【解决方案1】:

使用limit 1 回答您的第一个问题

【讨论】:

  • 我使用了限制 1,但它仍然无法工作,您能建议放在哪里吗?
  • 在您的ORDER BY COUNTER desc 子句之后
  • 是的,但它没有显示任何行。但是如果我把 ROWNUM =1 只显示艺术家 ID =1 而不是我认为的 rownum
【解决方案2】:

您的第二个问题可以与第一个问题完全相同。直接替换

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

【讨论】:

  • 嗨,我真的不明白你能输入 quey 吗?
  • 添加了完整的查询来回答。
  • 我不知道它为什么抱怨。我只是在我的 MySQL 系统中尝试过它并没有抱怨语法错误。第 8 行有一个右括号,它匹配第 2 行 "SELECT" 之前的左括号。
  • 哦,有没有其他方法可以在不使用限制 1 的情况下做到这一点?因为它会导致错误
  • 您好,我复制时没有出错
猜你喜欢
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 2013-07-07
  • 2013-05-10
  • 2012-03-18
  • 2023-03-09
相关资源
最近更新 更多