Как сделать так, чтобы COUNT не считал (fieldname) значения NULL? - PullRequest
0 голосов
/ 27 марта 2019

Я настраиваю запросы для бэкэнда электронной коммерции.У меня есть 3 таблицы: продукт (с идентификатором в качестве индекса), категория (с идентификатором в качестве индекса) и product_category, которая связывает первые 2 таблицы, поскольку один продукт может быть в нескольких категориях, и в одной категории может быть несколько продуктов.

Запрос на получение списка всех категорий, содержащих названия категорий и количество товаров в этой категории, включая нулевые значения (когда категория не содержит товаров).Последние 2 столбца показанных результатов.

К сожалению, COUNT (имя поля) дает мне 1 вместо 0.

Вот мой запрос SQL:

  SELECT product_category.id_category AS pr_cat_cat_id,
         id_product                   AS pr_cat_pr_id,
         product.name                 AS productname,
         categories.id,
         categories.name,
         COUNT ('pr_cat_cat_id')      AS quantity
    FROM product
         LEFT JOIN product_category ON product_category.id_product = product.id
         RIGHT JOIN (SELECT * FROM category) AS categories
             ON categories.id = product_category.id_category
GROUP BY name
ORDER BY id ASC

и получите эторезультат:

pr_cat_cat_id   pr_cat_pr_id    productname      id     name        quantity    
1               1               Product "Name1"  1      Category 1  2   
2               3               Product "Name 3" 2      Category 2  2   
NULL            NULL            NULL             3      Category 3  1   
NULL            NULL            NULL             4      Category 4  1   
NULL            NULL            NULL             5      Category 5  1   
NULL            NULL            NULL             6      Category 6  1   

Я ожидаю, что количество будет нулевым для категорий без продуктов.

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

Вы рассчитываете постоянное строковое значение, которое никогда не будет NULL. Используйте цитаты правильно. Вам они здесь не нужны:

COUNT(product_category.id_category) AS quantity

Вы не можете использовать псевдоним для COUNT(). Вы должны обратиться к исходному столбцу.

Обратите внимание, что ваш запрос искажен. Единственное, что в select должно быть name и функции агрегирования.

0 голосов
/ 27 марта 2019

На псевдонимы столбцов из того же списка выбора нельзя ссылаться. Вместо этого используйте исходное имя столбца:

COUNT(product_category.id_category)

Примечание: Одиночные кавычки предназначены для строковых литералов, и они никогда не бывают нулевыми.

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