MySQL 计数,如果不起作用并给出所有 0



通过使用左连接,我正在尝试计算现有购买的形状数量(如果没有购买,则为 0(。我还按形状类型对它们进行分组。但我得到的结果都是0。

表格形状:

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

表 shape_purchase:

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<-这是怎么回事?

结果:

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

几乎任何与NULL的比较都是NULL- 这被视为错误。 包括不平等。 这就是为什么SQL具有IS NULLIS 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值。 不需要条件逻辑。

最新更新