【问题标题】:Writing SQL query for music database [closed]为音乐数据库编写 SQL 查询 [关闭]
【发布时间】:2021-08-01 07:59:13
【问题描述】:

Click here for schema

我不太擅长 SQL,我不知道我是否正确地编写了这些查询。我对每个问题的回答在每个问题下方提供。非常感谢任何提示/更正。

对于这两个问题,我不知道我是否使用嵌套的 SELECT 正确编写了 WHERE 子句。

  1. 查找所有音频类型的轨道(MediaType.name 等于“audio”),其长度大于所有其他相同类型轨道的平均长度

我的回答:

SELECT *

FROM Track INNER JOIN MediaType

ON Track.MediaTypeId = MediaType.MediaTypeId

WHERE Track.Milliseconds > (SELECT AVG(Milliseconds) FROM Track)

AND MediaType.name = 'audio'
  1. 查找美国客户的姓名,这些客户不属于公司,并且总体上支付了所有美国客户中最多的费用

我的回答:

SELECT FirstName, LastName

FROM Customer INNER JOIN Invoice

ON Customer.CustomerId = Invoice.CustomerId

WHERE Customer.Country = 'US' AND Customer.Company = null AND Invoice.Total = (SELECT MAX(total) FROM Invoice)

【问题讨论】:

  • 如果您的代码执行了您想要的,那么这里的问题是题外话,应该在https://codereview.stackexchange.com/ 上提问。如果它没有执行您想要的,您必须指定预期结果和实际结果之间的差异,以及您的代码可能输出的任何错误。

标签: mysql sql database schema relational-database


【解决方案1】:

如果不属于公司的客户在Customer.Company 列中的客户为空,我建议您在第二个查询中使用is null 而不是= null

看看这个帖子:SQL is null and = null

【讨论】:

  • 感谢您的建议。关于我的代码在问题和架构方面的正确性,您认为我的答案是否满足问题要求?
  • 是的,否则这个解决方案看起来是正确的。请点赞。
【解决方案2】:
  1. 您提到的第一个答案:

...长度超过所有其他曲目的平均长度具有相同类型

所以where 条件下的子查询应该是“音频类型”的AVG(Milliseconds)

SELECT *

FROM Track INNER JOIN MediaType

ON Track.MediaTypeId = MediaType.MediaTypeId

WHERE Track.Milliseconds > (SELECT AVG(Milliseconds) FROM Track INNER JOIN MediaType

ON Track.MediaTypeId = MediaType.MediaTypeId WHERE MediaType = 'audio')

AND MediaType.name = 'audio'
  1. Customer.Company = null 总是返回 FALSE。您必须将其更改为Customer.Company is null

【讨论】:

    猜你喜欢
    • 2010-09-11
    • 2018-07-03
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    相关资源
    最近更新 更多