如何获取 MAX() 值并记录数据库中出现该值的主键?

How to get MAX() value and Record Primary Key where the value occurs in a Database?

我有一个数据库,其中 Hours 作为 integer 字段,PK 像 table 中的 record ID/Autonumber 来识别记录.如何通过 SQL 查询获取值最大值和最大值所在的记录 ID 或字段值? 我正在使用 .mdb MS Access 数据库。

我目前使用的代码:

        with dmpat.ADOQuery1 do
        begin
          sql.Clear; //Hours is integer field
          //Here I would like to get the ID (integer) field value of each of these values:
          sql.Add('SELECT MAX(Hours) AS [Max], MIN(Hours) AS [Min], AVG(Hours) AS [AVE]');
          sql.Add('FROM Professions');
          open;

          Max := fields[0];
          Min := fields[1];
          Ave := fields[2];
        end;

这可能吗? SQL 的新手,谢谢!

您可以使用 2 个子查询:

SELECT MAX(Hours) AS [Max],
       (SELECT TOP 1 ID FROM Professions ORDER BY Hours DESC) AS Max_ID, 
       MIN(Hours) AS [Min], 
       (SELECT TOP 1 ID FROM Professions ORDER BY Hours) AS Min_ID,
       AVG(Hours) AS [AVE]
FROM Professions

每个子查询对 table 进行降序或升序排序,并选择第一行。

所以我找到了这个解决方案。这将给出 Primary Key 或记录 ID。它还允许有多个记录具有 MAX()MIN() 值的可能性。

SELECT ID, Name, Hours AS [Max] FROM Professions
    WHERE Hours = (SELECT MAX(Hours) FROM Professions)
    ORDER BY ID ASC

这里是使用另一个数据库的证明,尽管同样的概念适用。

我实际上是在处理一个完全不同的问题时写了这段代码。