我有一张桌子,其中一部分看起来像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;。
答案 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;`