首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL Reurn值在Where范围之外,计数为0

MySQL Reurn值在Where范围之外,计数为0
EN

Stack Overflow用户
提问于 2017-04-15 18:29:38
回答 3查看 39关注 0票数 0

我有一张桌子,其中一部分看起来像这。

我想为每一个VideoName数一个值介于0到60之间的Cuepoint数。我正在使用这个查询来完成这个任务。

代码语言:javascript
运行
复制
`SELECT VideoName,COUNT(CuePoint) AS min1
    FROM text_xml
    WHERE CuePoint >= 0 and Cuepoint <= 60
    GROUP BY VideoName;`

它适用于那个紫色,但是有一些视频没有在这个范围内的Cuepoint。因此,这些视频不会从查询中返回。

我的问题是如何使查询返回所有的视频,包括那些在该范围内没有Cuepoint的视频。我希望以0的计数显示它们。像这样的小1:‘0’。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-15 18:37:42

试试这个:

代码语言:javascript
运行
复制
SELECT VideoName, SUM(IF(CuePoint >= 0 AND CuePoint <= 60, 1, 0)) AS min1
FROM text_xml
GROUP BY VideoName;`
票数 1
EN

Stack Overflow用户

发布于 2017-04-15 18:32:46

您可以通过将where条件移动到case when表达式中来做到这一点,您可以计算该表达式:

代码语言:javascript
运行
复制
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将允许稍微短一点的语法。

票数 2
EN

Stack Overflow用户

发布于 2017-04-15 18:33:34

您可以通过将条件移动到SELECT来做到这一点。在MySQL中,我会这样做:

代码语言:javascript
运行
复制
SELECT VideoName, SUM(CuePoint >= 0 and Cuepoint <= 60) AS min1
FROM text_xml
GROUP BY VideoName;

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43429755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档