# Runtime Sorting of NULL Values in Analytic Functions

By carefully writing queries or creating your design (or both), you can help the Vertica query optimizer skip sorting all columns in a table when performing an analytic function, which can improve query performance.

To minimize Vertica's need to sort projections during query execution, redefine the `employee` table and specify that NULL values are not allowed in the sort fields:

```=> DROP TABLE employee CASCADE;
=> CREATE TABLE employee
(empno INT,
deptno INT NOT NULL,
sal INT NOT NULL);
CREATE TABLE
=> CREATE PROJECTION employee_p AS
SELECT * FROM employee
ORDER BY deptno, sal;
CREATE PROJECTION
=> INSERT INTO employee VALUES(101,10,50000);
=> INSERT INTO employee VALUES(103,10,43000);
=> INSERT INTO employee VALUES(104,10,45000);
=> INSERT INTO employee VALUES(105,20,97000);
=> INSERT INTO employee VALUES(108,20,33000);
=> INSERT INTO employee VALUES(109,20,51000);
=> COMMIT;
COMMIT
```
```=> SELECT * FROM employee;
empno | deptno |  sal
-------+--------+-------
101 |     10 | 50000
103 |     10 | 43000
104 |     10 | 45000
105 |     20 | 97000
108 |     20 | 33000
109 |     20 | 51000
(6 rows)
=> SELECT deptno, sal, empno, RANK() OVER
(PARTITION BY deptno ORDER BY sal)
FROM employee;
deptno |  sal  | empno | ?column?
--------+-------+-------+----------
10 | 43000 |   103 |        1
10 | 45000 |   104 |        2
10 | 50000 |   101 |        3
20 | 33000 |   108 |        1
20 | 51000 |   109 |        2
20 | 97000 |   105 |        3
(6 rows)
```

If you do not care about NULL placement in queries that involve analytic computations, or if you know that columns contain no NULL values, specify `NULLS AUTO` in your queries`.` Vertica attempts to choose the placement that gives the fastest performance. Otherwise, specify `NULLS FIRST` or `NULLS LAST`.