如何获取 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
这里是使用另一个数据库的证明,尽管同样的概念适用。
我实际上是在处理一个完全不同的问题时写了这段代码。
我有一个数据库,其中 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
这里是使用另一个数据库的证明,尽管同样的概念适用。
我实际上是在处理一个完全不同的问题时写了这段代码。