Sql 如何在不使用聚合函数的情况下选择不在GROUPBY子句中的列
我正在查询Oracle数据库(简化查询。有更多条件): 这是一个非常大的数据库,MAX正在消耗查询加载时间。Sql 如何在不使用聚合函数的情况下选择不在GROUPBY子句中的列,sql,oracle,Sql,Oracle,我正在查询Oracle数据库(简化查询。有更多条件): 这是一个非常大的数据库,MAX正在消耗查询加载时间。 我不需要最大值。字段包含文本值。它可以是任何值,因为它们对于给定的字段1都应该是相同的。它可以是第一个、最后一个,也可以是更快的。您可能想从结果集中删除“重复项”。请检查: WITH cte AS ( SELECT DISTINCT field1 FROM table1 WHERE field3 = 'something1' ) SELECT field1, sub.fiel
我不需要最大值。字段包含文本值。它可以是任何值,因为它们对于给定的字段1都应该是相同的。它可以是第一个、最后一个,也可以是更快的。您可能想从结果集中删除“重复项”。请检查:
WITH cte AS (
SELECT DISTINCT field1
FROM table1
WHERE field3 = 'something1'
)
SELECT field1, sub.field2
FROM cte c
OUTER APPLY (SELECT field2
FROM table1 t
WHERE rownum = 1
AND t.field1 = c.field1) sub;
字段3和字段1上的索引可能会加快速度。为什么你认为问题出在
max()
上,而不是group by
?Gordon从我口中说出了这句话-group by很可能是瓶颈。您可以对此进行测试:从表1中选择DISTINCT field1,其中field3='something1',然后查看这是否比您发布的查询花费更少的时间。如果没有,您将知道分组是问题所在,而不是最大值。因为没有最大值和使用group by查询是一种删除坏数据(重复数据)的方法,而不是我的数据库。只能查询它。无法更改数据库结构
WITH cte AS (
SELECT DISTINCT field1
FROM table1
WHERE field3 = 'something1'
)
SELECT field1, sub.field2
FROM cte c
OUTER APPLY (SELECT field2
FROM table1 t
WHERE rownum = 1
AND t.field1 = c.field1) sub;