|
2.5.2. Функции без использования фразы GROUP BYЕсли не используется фраза GROUP BY, то в перечень элементов_SELECT можно включать лишь SQL-функции или выражения, содержащие такие функции. Другими словами, нельзя иметь в списке столбцы, не являющихся аргументами SQL-функций. Например, выдать данные о массе лука (ПР=10), проданного поставщиками, и указать количество этих поставщиков:
Если бы для вывода в результат еще и номера продукта был сформирован запрос SELECT ПР,SUM(К_во),COUNT(К_во) FROM Поставки WHERE ПР = 10; то было бы получено сообщение об ошибке. Это связано с тем, что SQL-функция создает единственное значение из множества значений столбца-аргумента, а для "свободного" столбца должно быть выдано все множество его значений. Без специального указания (оно задается фразой GROUP BY) SQL не будет выяснять, одинаковы значения этого множества (как в данном примере, где ПР=10) или различны (как было бы при отсутствии WHERE фразы). Поэтому подобный запрос отвергается системой. Правда, никто не запрещает дать запрос SELECT 'Кол-во лука =',SUM(К_во),COUNT(К_во) FROM Поставки WHERE ПР = 10;
Отметим также, что в столбце-аргументе перед применением любой функции, кроме COUNT(*), исключаются все неопределенные значения. Если оказывается, что аргумент - пустое множество, функция COUNT принимает значение 0, а остальные - NULL. Например, для получения суммы цен, средней цены, количества поставляемых продуктов и количества разных цен продуктов, проданных коопторгом УРОЖАЙ (ПС=5), а также для получения количества продуктов, которые могут поставляться этим коопторгом, можно дать запрос SELECT SUM(Цена),AVG(Цена),COUNT(Цена), COUNT(DISTINCT Цена),COUNT(*) FROM Поставки WHERE ПС = 5; и получить
В другом примере, где надо узнать "Сколько поставлено моркови и сколько поставщиков ее поставляют?": SELECT SUM(К_во),COUNT(К_во) FROM Поставки WHER ПР = 2; будет получен ответ:
Наконец, попробуем получить сумму массы поставленного лука с его средней ценой ("Сапоги с яичницей"):
2.5.1 | Содержание | 2.5.3 Copyright © CIT-forum |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
With any suggestions or questions please feel free to contact us |