It’s not the same without you

SQL References

SQL Keywords
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE

MySQL Functions
String Functions
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER

Numeric Functions
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE

Date Functions
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK

Advanced Functions
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION

SQL Server Functions
String Functions
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER

Numeric Functions
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN

Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR

Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME

MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase

Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val

Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year

Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric

SQL OperatorsSQL Data TypesSQL Quick Ref

Пример — сортировка результатов по относительной позиции

Вы также можете использовать SQL оператор ORDER BY для сортировки по относительной позиции в наборе результатов, где первое поле в наборе результатов равно 1, второе поле равно 2, третье поле равно 3 и т.д. В этом примере у нас есть таблица products со следующими данными:

product_id product_name category_id
1 Pear 50
2 Banana 50
3 Orange 50
4 Apple 50
5 Bread 75
6 Sliced Ham 25
7 Kleenex NULL

Теперь введите следующий SQL оператор.

PgSQL

SELECT product_id,
product_name
FROM products
WHERE product_name ‘Bread’
ORDER BY 1 DESC;

1
2
3
4
5

SELECTproduct_id,

product_name

FROMproducts

WHEREproduct_name>’Bread’

ORDERBY1DESC;

Будет выбрано 6 записей. Вот результаты, которые вы должны получить.

product_id product_name
7 Kleenex
6 Sliced Ham
4 Apple
3 Orange
2 Banana
1 Pear

В этом примере результаты сортируются по полю product_id в порядке убывания, поскольку поле product_id находится в позиции № 1 в наборе результатов и будет эквивалентно следующему SQL оператору ORDER BY.

PgSQL

SELECT product_id,
product_name
FROM products
WHERE product_name ‘Bread’
ORDER BY product_id DESC;

1
2
3
4
5

SELECTproduct_id,

product_name

FROMproducts

WHEREproduct_name>’Bread’

ORDERBYproduct_idDESC;

Arguments

order_by_expression
Specifies a column or expression on which to sort the query result set. A sort column can be specified as a name or column alias, or a nonnegative integer representing the position of the column in the select list.

Multiple sort columns can be specified. Column names must be unique. The sequence of the sort columns in the ORDER BY clause defines the organization of the sorted result set. That is, the result set is sorted by the first column and then that ordered list is sorted by the second column, and so on.

The column names referenced in the ORDER BY clause must correspond to either a column or column alias in the select list or to a column defined in a table specified in the FROM clause without any ambiguities. If the ORDER BY clause references a column alias from the select list, the column alias must be used standalone, and not as a part of some expression in ORDER BY clause, for example:

COLLATE collation_name
Specifies that the ORDER BY operation should be performed according to the collation specified in collation_name, and not according to the collation of the column as defined in the table or view. collation_name can be either a Windows collation name or a SQL collation name. For more information, see Collation and Unicode Support. COLLATE is applicable only for columns of type char, varchar, nchar, and nvarchar.

ASC | DESC
Specifies that the values in the specified column should be sorted in ascending or descending order. ASC sorts from the lowest value to highest value. DESC sorts from highest value to lowest value. ASC is the default sort order. Null values are treated as the lowest possible values.

OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
Specifies the number of rows to skip before it starts to return rows from the query expression. The value can be an integer constant or expression that is greater than or equal to zero.

Applies to: SQL Server 2012 (11.x) and later and Azure SQL Database.s

offset_row_count_expression can be a variable, parameter, or constant scalar subquery. When a subquery is used, it cannot reference any columns defined in the outer query scope. That is, it cannot be correlated with the outer query.

ROW and ROWS are synonyms and are provided for ANSI compatibility.

In query execution plans, the offset row count value is displayed in the Offset attribute of the TOP query operator.

FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
Specifies the number of rows to return after the OFFSET clause has been processed. The value can be an integer constant or expression that is greater than or equal to one.

Applies to: SQL Server 2012 (11.x) and later and Azure SQL Database.

fetch_row_count_expression can be a variable, parameter, or constant scalar subquery. When a subquery is used, it cannot reference any columns defined in the outer query scope. That is, it cannot be correlated with the outer query.

FIRST and NEXT are synonyms and are provided for ANSI compatibility.

ROW and ROWS are synonyms and are provided for ANSI compatibility.

In query execution plans, the offset row count value is displayed in the Rows or Top attribute of the TOP query operator.

Limitations and Restrictions

There is no limit to the number of columns in the ORDER BY clause; however, the total size of the columns specified in an ORDER BY clause cannot exceed 8,060 bytes.

Columns of type ntext, text, image, geography, geometry, and xml cannot be used in an ORDER BY clause.

An integer or constant cannot be specified when order_by_expression appears in a ranking function. For more information, see OVER Clause (Transact-SQL).

If a table name is aliased in the FROM clause, only the alias name can be used to qualify its columns in the ORDER BY clause.

Column names and aliases specified in the ORDER BY clause must be defined in the select list if the SELECT statement contains one of the following clauses or operators:

  • UNION operator

  • EXCEPT operator

  • INTERSECT operator

  • SELECT DISTINCT

Additionally, when the statement includes a UNION, EXCEPT, or INTERSECT operator, the column names, or column aliases must be specified in the select list of the first (left-side) query.

In a query that uses UNION, EXCEPT, or INTERSECT operators, ORDER BY is allowed only at the end of the statement. This restriction applies only to when you specify UNION, EXCEPT, and INTERSECT in a top-level query and not in a subquery. See the Examples section that follows.

The ORDER BY clause is not valid in views, inline functions, derived tables, and subqueries, unless either the TOP or OFFSET and FETCH clauses are also specified. When ORDER BY is used in these objects, the clause is used only to determine the rows returned by the TOP clause or OFFSET and FETCH clauses. The ORDER BY clause does not guarantee ordered results when these constructs are queried, unless ORDER BY is also specified in the query itself.

OFFSET and FETCH are not supported in indexed views or in a view that is defined by using the CHECK OPTION clause.

OFFSET and FETCH can be used in any query that allows TOP and ORDER BY with the following limitations:

  • The OVER clause does not support OFFSET and FETCH.

  • OFFSET and FETCH cannot be specified directly in INSERT, UPDATE, MERGE, and DELETE statements, but can be specified in a subquery defined in these statements. For example, in the INSERT INTO SELECT statement, OFFSET and FETCH can be specified in the SELECT statement.

  • In a query that uses UNION, EXCEPT or INTERSECT operators, OFFSET and FETCH can only be specified in the final query that specifies the order of the query results.

  • TOP cannot be combined with OFFSET and FETCH in the same query expression (in the same query scope).

Шаг 18 — Сортировка записей запроса, предложение ORDER BY

Ранее в запросах, которые мы с вами приводили, результирующие выборки, получались, в произвольном порядке. Что если нужно вывести скажем, список, учеников школы в алфавитном порядке или стоимость товаров по убыванию? Для этого в операторе SELECT предусмотрено предложение ORDER BY. Вот его синтаксис:

------- ORDER BY -- имя столбца ----------------  -------------------------------- .
                 -- порядковый номер столбца ---  --------  ASC  ----------
                                                  --------  DESC ----------
                 -------------------------  ,  -----------------------------------

Для начала, давайте проделаем следующий пример: Показать фактические объемы продаж для каждого офиса, отсортированные в алфавитном порядке по названиям, регионов и в каждом регионе — по названию городов.

SQL> SELECT CITY, REGION, SALES
  2  FROM OFFICES
  3  ORDER BY REGION, CITY
  4  /

CITY                           REGION                             SALES
------------------------------ ------------------------------ ---------
Бубурино                       Восток                           367,911
Красный Мотоцикл               Восток                           692,637
Чугуевск                       Восток                           735,044
Запиндрищинск                  Запад                            186,042
Котрогайка                     Запад                            835,915

Столбец идущий сразу за предложением ORDER BY является ГЛАВНЫМ ключом, столбцы следующие за ним, являются ВТОРОСТЕПЕННЫМИ ключами. Сортировать записи можно как по возрастанию, так и по убыванию.

Например, в следующем выражении: Вывести список офисов, отсортированный по фактическим объемам продаж в порядке убывания.

SQL> SELECT CITY, REGION, SALES
  2  FROM OFFICES
  3  ORDER BY SALES DESC
  4  /

CITY                           REGION                             SALES
------------------------------ ------------------------------ ---------
Котрогайка                     Запад                            835,915
Чугуевск                       Восток                           735,044
Красный Мотоцикл               Восток                           692,637
Бубурино                       Восток                           367,911
Запиндрищинск                  Запад                            186,042

Получаем отсортированные объемы продаж по убыванию, с применением предиката DESC, для сортировки по возрастанию, применяется ASC, вследствие того, что данный тип сортировки применяется по умолчанию, его можно не указывать. Так же, если столбец сортировки вычисляемый и не имеет имени, в выражении ORDER BY можно просто указать его порядковый номер!

Например, вот так: Вывести список офисов, отсортированный по разности между фактическим и плановым объемам продаж в порядке убывания.

SQL> SELECT CITY, REGION, (SALES - TARGET)
  2  FROM OFFICES
  3  ORDER BY 3 DESC
  4  /

CITY                           REGION                         (SALES-TARGET)
------------------------------ ------------------------------ --------------
Красный Мотоцикл               Восток                                117,637
Котрогайка                     Запад                                 110,915
Бубурино                       Восток                                 17,911
Чугуевск                       Восток                                -64,956
Запиндрищинск                  Запад                                -113,958

Так же применяя в выражении ORDER BY имена столбцов, номера столбцов, а так же выражения DESC, ASC, возможно строить достаточно сложные условия сортировки.

Например: Вывести список офисов, отсортированный в алфавитном порядке по названиям регионов, а в каждом регионе по — разности между фактическим и плановым объемам продаж в порядке убывания.

SQL> SELECT CITY, REGION, (SALES - TARGET)
  2  FROM OFFICES
  3  ORDER BY REGION ASC, 3 DESC
  4  /

CITY                           REGION                         (SALES-TARGET)
------------------------------ ------------------------------ --------------
Красный Мотоцикл               Восток                                117,637
Бубурино                       Восток                                 17,911
Чугуевск                       Восток                                -64,956
Котрогайка                     Запад                                 110,915
Запиндрищинск                  Запад                                -113,958

Таким образом, вам будет легко, задать необходимый порядок сортировки вашего запроса и не будет вызывать особенных трудностей! Пробуйте!


Предыдущий Шаг | Следующий Шаг | ОглавлениеАвтор .

ПримерыExamples

A.A. Пример простого синтаксисаBasic syntax example

В следующем примере функции PERCENTILE_CONT и PERCENTILE_DISC используются для определения медианной заработной платы сотрудников в каждом отделе.The following example uses PERCENTILE_CONT and PERCENTILE_DISC to find the median employee salary in each department. Эти функции могут возвращать разные значения.These functions may not return the same value. Функция PERCENTILE_CONT интерполирует соответствующее значение независимо от того, существует ли оно в наборе данных, тогда как функция PERCENTILE_DISC всегда возвращает фактическое значение из набора.PERCENTILE_CONT interpolates the appropriate value, which may or may not exist in the data set, while PERCENTILE_DISC always returns an actual value from the set.

Здесь приводится частичный результирующий набор.Here is a partial result set.

Б.B. Пример простого синтаксисаBasic syntax example

В следующем примере функции PERCENTILE_CONT и PERCENTILE_DISC используются для определения медианной заработной платы сотрудников в каждом отделе.The following example uses PERCENTILE_CONT and PERCENTILE_DISC to find the median employee salary in each department. Эти функции могут возвращать разные значения.These functions may not return the same value. Функция PERCENTILE_CONT интерполирует соответствующее значение независимо от того, существует ли оно в наборе данных, тогда как функция PERCENTILE_DISC всегда возвращает фактическое значение из набора.PERCENTILE_CONT interpolates the appropriate value, which may or may not exist in the data set, while PERCENTILE_DISC always returns an actual value from the set.

Здесь приводится частичный результирующий набор.Here is a partial result set.

Best Practices

Avoid specifying integers in the ORDER BY clause as positional representations of the columns in the select list. For example, although a statement such as is valid, the statement is not as easily understood by others compared with specifying the actual column name. In addition, changes to the select list, such as changing the column order or adding new columns, requires modifying the ORDER BY clause in order to avoid unexpected results.

In a SELECT TOP (N) statement, always use an ORDER BY clause. This is the only way to predictably indicate which rows are affected by TOP. For more information, see TOP (Transact-SQL).

Example — Sorting Results by relative position

You can also use the SQL ORDER BY clause to sort by relative position in the result set, where the first field in the result set is 1, the second field is 2, the third field is 3, and so on.

In this example, we have a table called products with the following data:

product_id product_name category_id
1 Pear 50
2 Banana 50
3 Orange 50
4 Apple 50
5 Bread 75
6 Sliced Ham 25
7 Kleenex NULL

Now enter the following SQL statement:

Try It

SELECT product_id, product_name
FROM products
WHERE product_name  'Bread'
ORDER BY 1 DESC;

There will be 6 records selected. These are the results that you should see:

product_id product_name
7 Kleenex
6 Sliced Ham
4 Apple
3 Orange
2 Banana
1 Pear

This example would sort the results by the product_id field in descending order, since the product_id field is in position #1 in the result set and would be equivalent to the following SQL ORDER BY clause:

Try It

Параметры

JPA определяет названные параметры и позиционные параметры. Названные параметры могут быть определены в JPQL использование синтаксиса .
Позиционные параметры могут быть определены в JPQL использование синтаксиса ? или ?. Позиционные параметры запускаются в позиции 1 не .

Пример запроса названного параметра
Query query = em.createQuery("SELECT e FROM Employee e WHERE e.firstName = :first and e.lastName = :last");
query.setParameter("first", "Bob");
query.setParameter("last", "Smith");
ListEmployee> list = query.getResultList();
пример запроса позиционного параметра
Query query = em.createQuery("SELECT e FROM Employee e WHERE e.firstName = ? and e.lastName = ?");
query.setParameter(1, "Bob");
query.setParameter(2, "Smith");
ListEmployee> list = query.getResultList();

Ограничение возвращаемых строк

Согласно ISO SQL:2003 возвращаемый набор данных может быть ограничен с помощью:

  • курсоров, или
  • введением оконных функций в оператор SELECT

Оконная функция ROW_NUMBER()

Существуют различные оконные функции. может быть использована для простого ограничения числа возвращаемых строк. Например, для возврата не более десяти строк:

SELECT * FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
    columns
  FROM tablename
) AS foo
WHERE rownumber  10

ROW_NUMBER может быть недетерминированным: если key не уникален, каждый раз при выполнении запроса возможно присвоение разных номеров строкам, у которых key совпадает. Когда key уникален, каждая строка будет всегда получать уникальный номер строки.

Оконная функция RANK()

Функция работает почти так же, как ROW_NUMBER, но может вернуть более чем n строк при определённых условиях. Например, для получения top-10 самых молодых людей:

SELECT * FROM (
  SELECT
    RANK() OVER (ORDER BY age ASC) AS ranking,
    person_id,
    person_name,
    age
  FROM person
) AS foo
WHERE ranking  10

Данный код может вернуть более чем 10 строк. Например, если есть два человека с одинаковым возрастом, он вернёт 11 строк.

Нестандартный синтаксис

Не все СУБД поддерживают вышеуказанные оконные функции. При этом многие имеют нестандартный синтаксис для решения тех же задач. Ниже представлены варианты простого ограничения выборки для различных СУБД:

Производитель/СУБД Синтаксис ограничения
DB2 (Поддерживает стандарт, начиная с DB2 Version 6)
SELECT * FROM T FETCH FIRST 10 ROWS ONLY
Firebird
SELECT FIRST 10 * FROM T
Informix
SELECT FIRST 10 * FROM T
Interbase
SELECT * FROM T ROWS 10
Microsoft (Поддерживает стандарт, начиная с SQL Server 2005)
Также

SELECT TOP 10 PERCENT * FROM T ORDER BY col
MySQL
SELECT * FROM T LIMIT 10
SQLite
SELECT * FROM T LIMIT 10
PostgreSQL (Поддерживает стандарт, начиная с PostgreSQL 8.4)
SELECT * FROM T LIMIT 10
Oracle (Поддерживает стандарт, начиная с Oracle8i)
Также

SELECT * FROM T WHERE ROWNUM  10

Using OFFSET and FETCH to limit the rows returned

We recommend that you use the OFFSET and FETCH clauses instead of the TOP clause to implement a query paging solution and limit the number of rows sent to a client application.

Using OFFSET and FETCH as a paging solution requires running the query one time for each «page» of data returned to the client application. For example, to return the results of a query in 10-row increments, you must execute the query one time to return rows 1 to 10 and then run the query again to return rows 11 to 20 and so on. Each query is independent and not related to each other in any way. This means that, unlike using a cursor in which the query is executed once and state is maintained on the server, the client application is responsible for tracking state. To achieve stable results between query requests using OFFSET and FETCH, the following conditions must be met:

  1. The underlying data that is used by the query must not change. That is, either the rows touched by the query are not updated or all requests for pages from the query are executed in a single transaction using either snapshot or serializable transaction isolation. For more information about these transaction isolation levels, see SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  2. The ORDER BY clause contains a column or combination of columns that are guaranteed to be unique.

See the example «Running multiple queries in a single transaction» in the Examples section later in this topic.

If consistent execution plans are important in your paging solution, consider using the OPTIMIZE FOR query hint for the OFFSET and FETCH parameters. See «Specifying expressions for OFFSET and FETCH values» in the Examples section later in this topic. For more information about OPTIMIZE FOR, see Query Hints (Transact-SQL).

ПримерыExamples

A.A. Сравнение значений по годамCompare values between years

В запросе используется функция LEAD для возврата разности в квотах продаж для указанного работника за последующие годы.The query uses the LEAD function to return the difference in sales quotas for a specific employee over subsequent years

Обратите внимание, что для последней строки возвращается значение по умолчанию, т. е

нуль (0), так как для нее последующие значения отсутствуют.Notice that because there is no lead value available for the last row, the default of zero (0) is returned.

Результирующий набор:Here is the result set.

Б.B. Сравнение значений внутри секцийCompare values within partitions

В следующем примере функция LEAD используется для сравнения объемов продаж за текущий год между сотрудниками.The following example uses the LEAD function to compare year-to-date sales between employees. Предложение PARTITION BY указывается для секционирования строк результирующего набора по территориям продаж.The PARTITION BY clause is specified to partition the rows in the result set by sales territory. Функция LEAD применяется к каждой секции отдельно, и вычисление начинается заново для каждой секции.The LEAD function is applied to each partition separately and computation restarts for each partition. Предложение ORDER BY, указанное в предложении OVER, сортирует строки в каждой из секций перед применением функции.The ORDER BY clause specified in the OVER clause orders the rows in each partition before the function is applied. Предложение ORDER BY в инструкции SELECT упорядочивает строки во всем результирующем наборе.The ORDER BY clause in the SELECT statement orders the rows in the whole result set

Обратите внимание, что для последней строки каждой секции возвращается значение по умолчанию, т. е

нуль (0), так как последующее значение для последней строки отсутствует.Notice that because there is no lead value available for the last row of each partition, the default of zero (0) is returned.

Результирующий набор:Here is the result set.

В.C. Указание произвольных выраженийSpecifying arbitrary expressions

В следующем примере демонстрируется указание ряда произвольных выражений в синтаксисе функции LEAD.The following example demonstrates specifying a variety of arbitrary expressions in the LEAD function syntax.

Результирующий набор:Here is the result set.

Examples

The following example returns, from the Adventure Works cube, the number of reseller orders for all Calendar Quarters from the Calendar hierarchy on the Date dimension.The Order function reorders the set for the ROWS axis. The Order function orders the set by in descending hierarchical order as determined by the hierarchy.

Notice how in this example, when the DESC flag is changed to BDESC, the hierarchy is broken and the list of Calendar Quarters is returned with no regard for the hierarchy:

The following example returns the Reseller Sales Measure for the top five selling subcategories of products, irrespective of hierarchy, based on Reseller Gross Profit. The Subset function is used to return only the first 5 tuples in the set after the result is ordered using the Order function.

The following example uses the Rank function to rank the members of the City hierarchy, based on the Reseller Sales Amount measure, and then displays them in ranked order. By using the Order function to first order the set of members of the City hierarchy, the sorting is done only once and then followed by a linear scan before being presented in sorted order.

The following example returns the number of products in the set that are unique, using the Order function to order the non-empty tuples before utilizing the Filter function. The CurrentOrdinal function is used to compare and eliminate ties.

To understand how the DESC flag works with sets of tuples, first consider the results of the following query:

On the Rows axis you can see that the Sales Territory Groups have been ordered in descending order by Tax Amount, as follows: North America, Europe, Pacific, NA. Now see what happens if we crossjoin the set of Sales Territory Groups with the set of Product Subcategories and apply the Order function in the same way, as follows:

While the set of Product Subcategories has been ordered in descending, hierarchical order, the Sales Territory Groups are now not sorted and appear in the order they appear on the hierarchy: Europe, NA, North America and Pacific. This is because only the last hierarchy in the set of tuples, Product Subcategories, is sorted. To reproduce the behavior of Analysis Services 2000, use a series of nested Generate functions to sort each set before it is crossjoined, for example:

DB2

Платформа DB2 поддерживает синтаксис ANSI, за исключением опции COLLATE. Кроме того, в этой платформе также есть расширение ORDER OF.

ORDER BY {ORDER OF имя_таблицы | выражение_для_сортировки }

Где:

ORDER OF имя_таблицы

Заставляет платформу DB2 сортировать строки родительской таблицы так, как они отсортированы в подзапросе. Чтобы лучше понять эту идею, вспомните, что DB2 поддерживает сортировку на уровне подзапроса. Тем не менее отсортированный подзапрос не будет возвращать отсортированный результирующий набор, если не используется предложение ORDER BY ORDER OF. Параметр имя_таблщы должен представлять собой имя таблицы, на которую ссылается родительский запрос. Пример:

SELECT
 qty,
 price,
 order_nbr
FROM
(SELECT
  order_nbr,
  qty,
  price
 FROM sales_Ql_2005
 UNION
 SELECT
  order_nbr,
  qty,
  price
 FROM sales_Q2_2005
 ORDER BY price, qty, order_nbr
) AS ytd_sales
ORDER BY ORDER OF ytd_sales;

Платформа DB2 по-прежнему поддерживает функции SQL92, такие, как сортировка по порядковому положению. По умолчанию DB2 считает значения NULL самыми большими.

Ниже приводится еще один пример подзапросов с сортировкой. Сначала мы создаем представление с именем best, которое возвращает пять самых продаваемых книг из таблицы sales, после чего мы находим авторов этих пяти самых продаваемых книг.

CREATE VIEW best(title) AS
 SELECT
  title
 FROM sales
 ORDER BY sold FETCH FIRST 5 ROWS ONLY;

SELECT
 author
FROM best
JOIN authors ON best.title=author.title
ORDER BY ORDER OF best;

Платформа DB2 не поддерживает использование предложения ORDER BY для столбцов следующих типов данных: LONG VARCHAR, CLOB, LONG VARGRAPHIC, DBCLOB, BLOB и DATALINK. Также DB2 не поддерживает сортировку по структурным типам.

Ссылка на основную публикацию