【问题标题】:SQL statement to get the MIN() from the AVG() returned from second query从第二个查询返回的 AVG() 中获取 MIN() 的 SQL 语句
【发布时间】:2017-03-04 16:30:21
【问题描述】:

我有一个关于 SQL 语句中的子查询的问题。我要做的是找到从另一个查询返回的平均列结果的最短时间。

SELECT userID
FROM myTable
WHERE time = MIN(...)

SELECT userID, AVG(date_time)
FROM myTable
GROUP BY userID

第二个查询将返回我两次之间的平均值并由第三方分组。

然后我的第一个查询需要从我的第二个查询中找到最小平均时间返回。如何将这两个查询组合在一起?

我的第二个查询的示例数据如下:

user1  20
user2  45
user3  10

那么对于我的第一个查询,我需要获得具有最低平均值的用户:

user3  10

提前致谢。

【问题讨论】:

  • 样本数据和期望的结果将真正阐明您想要做什么。
  • 我删除了 MySQL 标签,因为你说你使用的是 SQL Server。

标签: sql sql-server average min


【解决方案1】:

如果你想要一排平均时间最短,那么你可以这样做:

SELECT TOP 1 userID
FROM myTable
GROUP BY userID
ORDER BY AVG(date_time) ASC;

如果您想要多行,请使用TOP WITH TIES:

SELECT TOP (1) WITH TIES userID
FROM myTable
GROUP BY userID
ORDER BY AVG(date_time) ASC;

【讨论】:

  • 我正在使用 MSSQL,它在 LIMIT 处向我抛出错误消息
  • 好吧,我想出使用TOP 1。顺便问一下,你说的多行是什么意思?因为我认为 MIN 只会选择最小的一个?
  • @2dollar20cents 。 . .该问题最初被标记为“mysql”。我修复了 SQL Server 的答案。
【解决方案2】:

试试这个查询:

SELECT TOP 1 userID
FROM myTable
GROUP BY userID
ORDER BY AVG(date_time) ASC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-03
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多