MySQL将Where值范围外的值重新计算为0

时间:2017-04-15 18:29:39

标签: mysql sql

我有一张桌子,其中一部分看起来像this.

我想为每个VideoName计算值为0到60的Cuepoints的数量。我正在使用此查询来执行此操作

`SELECT VideoName,COUNT(CuePoint) AS min1
    FROM text_xml
    WHERE CuePoint >= 0 and Cuepoint <= 60
    GROUP BY VideoName;`

它适用于该purpese,但有些视频在该范围内没有Cuepoints。因此,这些视频不会从查询中返回。

我的问题是如何让查询返回所有视频,包括那个范围内没有Cuepoints的视频。我希望它们的显示数为0.像这样的min1:&#39; 0&#39;。

3 个答案:

答案 0 :(得分:2)

您可以将where条件移动到case when表达式中来计算:

SELECT VideoName,
       COUNT(CASE WHEN CuePoint >= 0 and Cuepoint <= 60 THEN 1 END) AS min1
FROM text_xml
GROUP BY VideoName;

count将计算表达式中非空值的数量。由于表达式仅在条件为真时产生1,因此那些将被计数。在其他情况下,表达式产生null,这不会增加计数。所以对于那些你会得到0。

请注意,这符合标准SQL。 MySql将允许像Gordon提供的稍微缩短的语法。

答案 1 :(得分:1)

您可以将条件移至SELECT来执行此操作。在MySQL中,我会这样做:

SELECT VideoName, SUM(CuePoint >= 0 and Cuepoint <= 60) AS min1
FROM text_xml
GROUP BY VideoName;

MySQL将布尔表达式视为数字上下文中的整数。 “1”为真,“0”为假。因此,此SUM()返回表达式计算结果为true的行数。

答案 2 :(得分:1)

试试这个:

SELECT VideoName, SUM(IF(CuePoint >= 0 AND CuePoint <= 60, 1, 0)) AS min1
FROM text_xml
GROUP BY VideoName;`