Проблема с предложением WHERE при создании временного столбца - PullRequest
0 голосов
/ 23 апреля 2020

Я написал запрос, который создает новую временную строку с частотой показа идентификатора, и мне нужно удалить все элементы, для которых частота фильтра ниже моего значения частоты, равного 4. Код работает как запланировано, пока Я добавляю предложение where (ниже). По какой причине вы не можете добавить предложение where, где вы обычно это делаете?

  SELECT RecipeTitle, COUNT(recipes.RecipeID) AS ingredientsNeeded FROM recipes 
         INNER JOIN recipe_ingredients ON recipe_ingredients.RecipeID = recipes.RecipeID 
              GROUP BY recipes.RecipeID 
              ORDER BY ingredientsNeeded ASC

Возвращает

Calzone | 3 
Hot dog | 2

et c

SELECT RecipeTitle, COUNT(recipes.RecipeID) AS ingredientsNeeded FROM recipes 
     INNER JOIN recipe_ingredients ON recipe_ingredients.RecipeID = recipes.RecipeID 
          GROUP BY recipes.RecipeID 
          WHERE ingredientsNeeded < 4
          ORDER BY ingredientsNeeded ASC

Вы получаете ошибка:

У вас есть ошибка в вашем SQL Синтаксисе ... проверьте руководство на предмет правильного синтаксиса для использования рядом с WHERE ...

1 Ответ

1 голос
/ 23 апреля 2020

Вы должны использовать предложение HAVING, чтобы сделать утверждения для подсчета:

SELECT
    r.RecipeTitle,                          -- potentially OK to select this, see below
    COUNT(r.RecipeID) AS ingredientsNeeded
FROM recipes r
INNER JOIN recipe_ingredients ri
    ON ri.RecipeID = r.RecipeID
GROUP BY
    r.RecipeID 
HAVING
    ingredientsNeeded < 4
ORDER BY
    ingredientsNeeded;

Обратите внимание, что вы агрегируете по RecipeID, так что технически вы можете выбрать только это, или любой агрегат. Однако можно выбрать RecipeTitle, если RecipeID является первичным ключом таблицы recipes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...