为音乐数据库编写 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 查询 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章