分析功能的替代方案

时间:2017-11-27 05:34:28

标签: sql performance window-functions

我只想知道下面是否有另一种方法

分析功能,应提供更好的性能。

SELECT last_name FROM 
   (SELECT last_name, ROW_NUMBER() OVER (partition by department_id ORDER BY last_name) R FROM employees)
   WHERE R =1;

1 个答案:

答案 0 :(得分:0)

这是不使用row_number()的查询的替代方法。然而,尽管它可以作为替代方案使用,但它可能不如使用row_number()那样有效。请注意,以下示例在MySQL中的位可能几乎在任何rdbms中:

SQL Fiddle

CREATE TABLE Employees
    (`Department` varchar(1), `Last_Name` varchar(3))
;

INSERT INTO Employees
    (`Department`, `Last_Name`)
VALUES
    ('a', 'abc'),
    ('a', 'def'),
    ('b', 'ghi')
;

查询1

select
e.*
from employees e
left join employees e2 on e.department = e2.department
                      and e.last_name > e2.last_name
where e2.last_name IS NULL

<强> Results

| Department | Last_Name |
|------------|-----------|
|          a |       abc |
|          b |       ghi |