Ограничение на агрегированные функции
Предложение HAVING
Допустим, нам нужно усложнить пример и сказать, что нам интересны только покупки, превышающие $ 3000. Т.е. нужно применить WHERE MAX (amt)>3000.00, но WHERE работает с каждой единственной строкой, а агрегированные функции работают в терминах групп строк и использование WHERE неприемлемо (ANSI в данном случае не велит).
Для исключения групп, также как WHERE работает для отдельных строк, применяется специальное предложение HAVING:
SELECT snum, odate, MAX (amt)
FROM Orders
GROUP BY snum, odate
HAVING MAX (amt)>3000.00;
Выводы: таким образом, HAVING похоже на WHERE, но если WHERE действует на отдельные записи до GROUP BY, то HAVING работает с группами после действия GROUP BY.
В ANSI версии SQL недопустима вложенность, т.е. агрегатная функция в качестве аргумента агрегатной функции:
SELECT odate, MAX (SUM(amt))
FROM Orders
GROUP BY odate;
К форматированию относится вставка констант в результат запроса, вычисления, задание нужной последовательности.
Выражения с выбранными полями. SQL позволяет вносить выражения и константы в выбранные поля. Выражения могут заменять поля в предложениях SELECT. Например, если комиссионные продавцов удобнее представить в виде процентов, то получим:
SELECT snum, sname, city, comm*100
FROM Sales people;
Последний столбец не имеет имени и является выходным столбцом.
Кроме выражений есть возможность вставить константы, например, текстовые.
SELECT snum, sname, city, ‘%’, comm*100
…
или другой пример:
SELECT ‘For’, odate, ‘there are’
COUNT (DISTINCT onum), ‘orders’
FROM Orders
GROUP BY odate
For 10/03/1990, there are 5 orders
For 10/04/1990, there are 2 orders
F …