SQL高效的方法来定位每个组合的示例

时间:2013-02-19 10:07:42

标签: sql sybase

对于几列的所有可能组合,是否有更有效的查询表(或表集合)的方法,我目前正在运行group by然后max,但这似乎不是最有效的方式。

以下示例的SQL小提琴:http://sqlfiddle.com/#!2/25f8b/3

示例表

ID | Name | Age | City   | Color
--------------------------------
1  | Dave | 10  | London | Red
2  | Dave | 11  | London | Purple
3  | Dave | 10  | Paris  | Orange
4  | Jim  | 10  | London | Red
5  | Jim  | 10  | London | Green
6  | Jim  | 11  | London | Lazer
etc... (around 500,000 rows)

目前正在做:

SELECT  max(ID), Name, Age, City, Color
from People
group by Name, Age, City

生产:

MAX(ID) NAME    AGE CITY    COLOR
1       Dave    10  London  Red
3       Dave    10  Paris   Orange
2       Dave    11  London  Purple
5       Jim     10  London  Red
6       Jim     11  London  Lazer
  • 缺少注4,因为它与5
  • 完全相同
  • 3包括在内,因为它有一个与1不同的城市,即使年龄/名称相同

然而,目前在这个庞大的数据库上,返回结果需要大约十分钟(注意它实际上是几个表的连接)

是否有更有效的方法可以返回相同的结果?我想象的是SELECT * WHERE name = %, age = % and city = % LIMIT 1或类似的

的大量集合

1 个答案:

答案 0 :(得分:0)

要获得不同的组合,请使用保留字DISTINCT

SELECT DISTINCT Name, Age, City
FROM People

这给出了与结果相同的结果:

SELECT Name, Age, City
FROM People
GROUP BY Name, Age, City

但它有限:

  • 如果添加列(如“颜色”),则会将其包含在组合分析
  • 您不能使用聚合函数,例如MAX
  • 我不知道这是否有更好的表现