小编jof*_*itz的帖子

在WHERE子句中使用SELECT语句

SELECT * FROM ScoresTable WHERE Score = 
  (SELECT MAX(Score) FROM ScoresTable AS st WHERE st.Date = ScoresTable.Date)
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

它不那么优雅,但似乎比我以前的版本运行得更快.我不喜欢它,因为它在GUI中没有很清楚地显示(并且需要SQL初学者理解).我可以将它分成两个单独的查询,但随后事情开始变得混乱......

NB我需要的不仅仅是日期和分数(例如姓名)

sql select where-clause

9
推荐指数
2
解决办法
10万
查看次数

在WHERE子句中使用子查询或SELECT语句更好/更有效(在MS Access中)

我有一个MS Access数据库,其中包含一个日期,分数和这些分数所关联的人的表格,例如

Date   Score Name
1/6/11     5 Dave
1/6/11    10 Sarah
2/6/11     4 Dave
2/6/11     3 Graham
3/6/11     1 Dan
4/6/11    11 Dan
4/6/11     9 Graham

我想写一个查询来查找谁在每个日期获得最高社交,即结果:

Date   Score Name
1/6/11    10 Sarah
2/6/11     4 Dave
3/6/11     1 Dan
4/6/11    11 Dan

我可以想到这个问题的两个解决方案(我愿意接受其他建议),如下所示:

1)编写查询以查找每个日期的最低分数,然后写入将第一个查询加入原始表的第二个查询.即:

查询1:

SELECT Date, MAX(Score) AS MaxScore FROM ScoresTable GROUP BY Date
Run Code Online (Sandbox Code Playgroud)

QUERY2:

SELECT ScoresTable.* 
FROM ScoresTable INNER JOIN Query1 
  ON ScoresTable.Date = Query1.Date 
  AND ScoresTable.Score = Query1.MaxScore
Run Code Online (Sandbox Code Playgroud)

[这些可以合并为一个查询:

SELECT ScoresTable.* 
FROM ScoresTable INNER JOIN 
  (SELECT Date, …
Run Code Online (Sandbox Code Playgroud)

sql ms-access

6
推荐指数
1
解决办法
1262
查看次数

标签 统计

sql ×2

ms-access ×1

select ×1

where-clause ×1