首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -尝试根据大小写计算记录(简单?)

SQL -尝试根据大小写计算记录(简单?)
EN

Stack Overflow用户
提问于 2020-04-09 19:01:51
回答 2查看 37关注 0票数 0

非常简单的情况-我无法正确计算下表的月数-预期的数字是2,而不是3-有趣的是,在同样的条件下,"valueagg“被正确计算出来了!

代码语言:javascript
复制
INSERT INTO ForgeRock
    ([productName], [description], [month], [value] )
VALUES
    ('OpenIDM', 'Y',1,33.2),
    ('OpenIDM', 'Y',2, 12.1),
    ('OpenIDM', 'Y',3, 1.1)
;

测试

代码语言:javascript
复制
SELECT
  productName,
  description,
    sum(CASE WHEN [MONTH] between 1 and 2 then [VALUE] else 0 end) valueagg    --works
 ,count(CASE WHEN [MONTH] between 1 and 2 then [MONTH] else 0 end) month_count --doesn't work
 ,count(CASE WHEN [MONTH] between 1 and 2 then 1 else 0 end) month_count2      --doesn't work
FROM
  ForgeRock
  group by   productName,
  description

结果

代码语言:javascript
复制
| productName | description |           valueagg | month_count | month_count2 |
|-------------|-------------|--------------------|-------------|--------------|
|     OpenIDM |           Y | 45.300000000000004 |           3 |            3 |

http://sqlfiddle.com/#!18/14603/3/0

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-09 19:03:21

您正在将count()else一起使用。count()计算非空值的数量,并且-- 0和任何其他值一样都是"not NULL“。

请改用sum()

代码语言:javascript
复制
SELECT productName, description,
       SUM(CASE WHEN [MONTH] between 1 and 2 then [VALUE] else 0 end) as valueagg    --works
       SUM(CASE WHEN [MONTH] between 1 and 2 then [MONTH] else 0 end) as month_count --doesn't work
       SUM(CASE WHEN [MONTH] between 1 and 2 then 1 else 0 end) month_count2      --doesn't work
FROM ForgeRock
GROUP BY productName, description

或者从COUNT()中删除ELSE

票数 0
EN

Stack Overflow用户

发布于 2020-04-09 19:07:49

删除CASE表达式的ELSE部分:

代码语言:javascript
复制
SELECT
  productName,
  description,
    sum(CASE WHEN [MONTH] between 1 and 2 then [VALUE] else 0 end) valueagg
    ,count(CASE WHEN [MONTH] between 1 and 2 then [MONTH] end) month_count
FROM
  ForgeRock
  group by   productName,
  description

或者替换为SUM(),如下所示:

代码语言:javascript
复制
SELECT
  productName,
  description,
    sum(CASE WHEN [MONTH] between 1 and 2 then [VALUE] else 0 end) valueagg
    ,sum(CASE WHEN [MONTH] between 1 and 2 then 1 else 0 end) month_count
FROM
  ForgeRock
  group by   productName,
  description
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61119642

复制
相关文章

相似问题

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