为音乐数据库编写 SQL 查询 [关闭]

Posted

技术标签:

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

Click here for schema

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

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

    查找所有音频类型的轨道(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'
    查找美国客户的姓名,这些客户不属于公司,并且总体上支付了所有美国客户中最多的费用

我的回答:

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/ 上提问。如果它没有执行您想要的,您必须指定预期结果和实际结果之间的差异,以及您的代码可能输出的任何错误。 【参考方案1】:

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

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

【讨论】:

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

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

所以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'
    Customer.Company = null 总是返回 FALSE。您必须将其更改为Customer.Company is null

【讨论】:

以上是关于为音乐数据库编写 SQL 查询 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

您多久编写一次新的 SQL 查询或尝试使用现有的查询? [关闭]

如何编写SQL查询以通过频道和节目播放以下数据? [关闭]

如何以干净且可维护的方式编写非常复杂的 SQL? [关闭]

SQL:在 SQL 中编写嵌套查询 [关闭]

如何在 Linq 中编写嵌套的 Sql 查询 [关闭]

如何为以下 Scenerio 编写 linq 查询 [关闭]