MySQL COUNT ЕСЛИ не работает и дает все 0 - PullRequest
0 голосов
/ 05 октября 2019

Используя левое соединение, я пытаюсь подсчитать количество фигур с существующими покупками (0, если покупок нет). Я также группирую их по типу формы. Но все результаты, которые я получаю, равны 0.

Форма таблицы:

id  shape     colour
1   circle    red
2   rectangle blue
3   triangle  green
4   star      yellow
5   cross     purple
6   moon      orange

Форма_покупки таблицы:

id  price
3   3.24
2   1.95
3   5.42
4   6.32
5   4.21
1   7.45
3   5.97
3   4.31
1   6.32
4   7.82

SQL: SELECT shapes.shape, COUNT(IF(shape_purchase.price != NULL, 1, NULL)) FROM shapes LEFT JOIN shape_purchase ON shapes.id = shape_purchase.id GROUP BY shapes.id <- Что здесь не так? </strong>

Результат:

shape      COUNT(IF(shape_purchase.price != NULL, 1, NULL))
circle     0
rectangle  0
triangle   0
star       0
cross      0
moon       0

Что-то не так с тем фактом, что я называю shape_purchase.price? Или левое соединение усложняет ситуацию?

К вашему сведению, SELECT * FROM shapes LEFT JOIN shape_purchase ON shapes.id = shape_purchase.id выглядит так:

id  shape      colour  id    price
3   triangle   green   3     3.24
2   rectangle  blue    2     1.95
3   triangle   green   3     5.42
4   star       yellow  4     6.32
5   cross      purple  5     4.21
1   circle     red     1     7.45
3   triangle   green   3     5.97
3   triangle   green   3     4.31
1   circle     red     1     6.32
4   star       yellow  4     7.82
6   moon       orange  NULL  NULL

1 Ответ

1 голос
/ 05 октября 2019

Почти любое сравнение с NULL равно NULL - что считается ложным. Включая неравенство. Вот почему SQL имеет IS NULL и IS NOT NULL.

Однако я бы порекомендовал написать ваш код следующим образом:

SELECT s.shape, COUNT(sp.price)
FROM shapes s LEFT JOIN
     shape_purchase sp
     ON s.id = sp.id
GROUP BY s.id;

COUNT(<expression>) подсчитывает не NULL значения. Нет необходимости в условной логике.

...