【发布时间】:2011-09-19 10:32:23
【问题描述】:
SELECT * FROM ScoresTable WHERE Score =
(SELECT MAX(Score) FROM ScoresTable AS st WHERE st.Date = ScoresTable.Date)
在 WHERE 子句中是否有描述使用 SELECT 语句的名称?这是好还是坏的做法?
这会是更好的选择吗?
SELECT ScoresTable.*
FROM ScoresTable INNER JOIN
(SELECT Date, MAX(Score) AS MaxScore
FROM ScoresTable GROUP BY Date) SubQuery
ON ScoresTable.Date = SubQuery.Date
AND ScoresTable.Score = SubQuery.MaxScore
它远没有那么优雅,但似乎比我以前的版本运行得更快。我不喜欢它,因为它在 GUI 中显示的不是很清楚(而且需要 SQL 初学者理解)。我可以将其拆分为两个单独的查询,但随后事情开始变得混乱......
注意我需要的不仅仅是日期和分数(例如姓名)
【问题讨论】:
-
您假设他的数据库实现了这一点。此外,几乎可以肯定这里不需要窗口函数来满足 Jo 的需求。
-
确实,对于这个简单的示例,它们不是必需的,但它们为这些类型的查询的更复杂变体提供了优雅的解决方案,因此值得了解。
-
我同意 - 值得了解 - 对于显然对 SQL 很陌生的人来说,还有很多东西需要学习。
-
您的 EDIT 是一个更好的解决方案,我认为更优雅。正如您已经注意到的那样,它的性能也更高。它可能看起来更复杂,但初学者应该从一开始就学习编写好的代码,而不是先学习坏习惯。
标签: sql select where-clause