Рассмотрим следующую таблицу:
Company BuildYear ProductName Cost
------ ----------- ----------- ----
Foo 1900 A_1 50
Foo 2000 B_1 50
Foo 2000 B_2 50
Bar 1900 A_1 50
Bar 1900 A_2 100
Bar 2000 B_1 50
Запрос № 1 (просто):
Мы ищем компаний, которые произвели только один вид продукции в 1900 ,В приведенном выше примере это будет только компания Foo
с продуктом A_1 (компания Bar
произвела два продукта различного типа, а именно A_1 и A_2)
. Для этого запрос будет:
SELECT *
FROM Table
WHERE BuildYear=1900
GROUP BY ProductName
HAVING COUNT(*) = 1
Запрос № 2 (моя проблема):
Сейчас мы ищем компаний, которые произвели только один вид продукции в 1900 году, и этот продукт стоит менее 75 .Для приведенной выше таблицы ответов ответом будет снова только компания Foo
.
Нет необходимости говорить, что простое добавление AND cost<75
к вышеуказанному запросу возвращает неправильный ответ (как Foo
, так и Bar
).Кроме того, добавление его к предложению HAVING
приводит к появлению сообщения об ошибке ниже:
Столбец «Стоимость» должен появляться в предложении GROUP BY или использоваться в статистической функции
С другой стороны, я бы предпочел не объединять результат вышеупомянутого запроса с исходной таблицей (если это возможно), поскольку таблица в действительности огромна.
Любая обратная связь будет принята с благодарностью.
ОБНОВЛЕНИЕ: столбцы, показанные выше, предназначены только для демонстрации, а в реальных таблицах они все TEXT
(поэтому MIN / MAXтрюк не применяется)
Обновление: почему не работает добавление предложения AND cost<75
к WHERE
?Поскольку этот пункт отключает продукт Bar::A_2
, а после оценки HAVING
он рассматривает Bar
как компанию с одним продуктом.