Если не используется фраза GROUP BY, то в перечень элементов SELECT можно включать лишь SQL-функции или выражения, содержащие такие функции. Другими словами, нельзя иметь в списке столбцы, не являющихся аргументами SQL-функций.
Например, выдать данные о массе лука (ПР=10), проданного поставщиками, и указать количество этих поставщиков:
Результат:
SELECT SUM(К_во),COUNT(К_во) FROM Поставки WHERE ПР = 10;
SUM(К_во)
COUNT(К_во)
Если бы для вывода в результат еще и номера продукта был сформирован запрос
то было бы получено сообщение об ошибке. Это связано с тем, что SQL-функция создает единственное значение из множества значений столбца-аргумента, а для "свободного" столбца должно быть выдано все множество его значений. Без специального указания (оно задается фразой GROUP BY) SQL не будет выяснять, одинаковы значения этого множества (как в данном примере, где ПР=10) или различны (как было бы при отсутствии WHERE фразы). Поэтому подобный запрос отвергается системой.
Отметим также, что в столбце-аргументе перед применением любой функции, кроме COUNT(*), исключаются все неопределенные значения. Если оказывается, что аргумент - пустое множество, функция COUNT принимает значение 0, а остальные - NULL.
Например, для получения суммы цен, средней цены, количества поставляемых продуктов и количества разных цен продуктов, проданных коопторгом УРОЖАЙ (ПС=5), а также для получения количества продуктов, которые могут поставляться этим коопторгом, можно дать запрос
SELECT SUM(Цена),AVG(Цена),COUNT(Цена), COUNT(DISTINCT Цена),COUNT(*) FROM ПоставкиWHERE ПС = 5;
и получить
SUM(Цена)
AVG(Цена)
COUNT(Цена)
COUNT(DISTINCT Цена)
COUNT(*)
6.2
1.24
В другом примере, где надо узнать "Сколько поставлено моркови и сколько поставщиков ее поставляют?":