在 SQL 查询中,"TOP 1" 是聚合函数(例如 MIN() 或 MAX()..)的可靠替代品吗?
In an SQL query, is "TOP 1" a reliable substitute for aggregate functions such MIN() or MAX()..?
"TOP 1" 是聚合函数(例如 MIN() 和 MAX()..)的可靠替代品吗?下面显示的是 Access 2007 中的一个基本查询,用于确定客户在特定月份首次订购特定产品的时间。 DBMS系统可能无关紧要,因为这个问题可以适用于任何系统。
在此查询中,"TOP 1" 与日期字段上的 ORDER BY 结合使用。这 returns 一项记录,这是迄今为止最早的记录。但是……这样可以吗……?会出什么问题..?有没有更好的方法..?
SELECT TOP 1 DAACCT, DAITEM, DAQTY, DAIDAT
FROM fqlOrdersGrandHistory
WHERE DAACCT="T7414" AND DAITEM="45234" AND (DAIDAT>=20170501 AND DAIDAT<=20170531)
ORDER BY DAIDAT;
TOP
用于限制获取的行,是的,除非您有多个具有相同数据的记录,否则没问题。不确定它与 Min()
或 Max()
有何关系...您在使用 Group By
对行进行分组时使用 Min()
或 Max()
聚合函数。即使您没有指定 group by
分组也会在整个结果集上发生
可靠是一个主观术语。是的,TOP 1
会给你一个结果,MAX()
或 MIN()
也会。这取决于你追求什么。
如果您只查找特定用户(就像您在本例中那样)并按 DATE 升序排序并使用 TOP 1
,您将获得该记录的所有详细信息。但是,如果您要查找 table 中每个用户的首次购买,则 TOP 1 只会为您提供第一个下订单的人的信息。
另一方面,如果您使用 SELECT DAACCT, MIN(DAIDAT) FROM table GROUP BY DAACCT
,那么您将获得每个用户的最早购买。这假设您将 DAIDAT
存储为带有时间分量的日期格式,而不仅仅是日期值本身。如果你这样做,你就会打开自己的多个可能的记录。
TL;DR:如果您坚持查询的概念 1) 寻找非常具体的用户 2) 非常具体的产品和 3) 您的日期存储为正确的日期,TOP 1
将比聚合函数更好用。如果这三个条件之一不满足,则重新评估。
如果所选字段的一个字段或多个字段的组合是唯一的,则可以。
如果不匹配,结果集将包含字段或组合匹配的所有记录。为避免这种情况,请始终在所选字段中包含一个自动编号字段。
"TOP 1" 是聚合函数(例如 MIN() 和 MAX()..)的可靠替代品吗?下面显示的是 Access 2007 中的一个基本查询,用于确定客户在特定月份首次订购特定产品的时间。 DBMS系统可能无关紧要,因为这个问题可以适用于任何系统。
在此查询中,"TOP 1" 与日期字段上的 ORDER BY 结合使用。这 returns 一项记录,这是迄今为止最早的记录。但是……这样可以吗……?会出什么问题..?有没有更好的方法..?
SELECT TOP 1 DAACCT, DAITEM, DAQTY, DAIDAT
FROM fqlOrdersGrandHistory
WHERE DAACCT="T7414" AND DAITEM="45234" AND (DAIDAT>=20170501 AND DAIDAT<=20170531)
ORDER BY DAIDAT;
TOP
用于限制获取的行,是的,除非您有多个具有相同数据的记录,否则没问题。不确定它与 Min()
或 Max()
有何关系...您在使用 Group By
对行进行分组时使用 Min()
或 Max()
聚合函数。即使您没有指定 group by
分组也会在整个结果集上发生
可靠是一个主观术语。是的,TOP 1
会给你一个结果,MAX()
或 MIN()
也会。这取决于你追求什么。
如果您只查找特定用户(就像您在本例中那样)并按 DATE 升序排序并使用 TOP 1
,您将获得该记录的所有详细信息。但是,如果您要查找 table 中每个用户的首次购买,则 TOP 1 只会为您提供第一个下订单的人的信息。
另一方面,如果您使用 SELECT DAACCT, MIN(DAIDAT) FROM table GROUP BY DAACCT
,那么您将获得每个用户的最早购买。这假设您将 DAIDAT
存储为带有时间分量的日期格式,而不仅仅是日期值本身。如果你这样做,你就会打开自己的多个可能的记录。
TL;DR:如果您坚持查询的概念 1) 寻找非常具体的用户 2) 非常具体的产品和 3) 您的日期存储为正确的日期,TOP 1
将比聚合函数更好用。如果这三个条件之一不满足,则重新评估。
如果所选字段的一个字段或多个字段的组合是唯一的,则可以。
如果不匹配,结果集将包含字段或组合匹配的所有记录。为避免这种情况,请始终在所选字段中包含一个自动编号字段。