Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQL case查询没有提供正确的值

SQL case查询没有提供正确的值
EN

Stack Overflow用户
提问于 2020-03-18 21:18:56
回答 3查看 120关注 0票数 0

第一组查询:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select count(distinct device_ifa) from table_1 where distance_diff <= 50  --  41504

select count(distinct device_ifa) from table_1  where distance_diff <= 100  --  69469

select count(distinct device_ifa) from table_1 where distance_diff <= 200  --  100859

应该与查询的计数完全匹配:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select case when distance_diff <= 50 then '50m'
            when distance_diff <= 100 then '100m'
            when distance_diff <= 200 then '200m' 
       end as radius, 
       count(distinct device_ifa) from table_1 
group by 1 order by 1


radius  _col1

100m   -    62512
200m    -   92547
50m      -   41504

,但计数不匹配-谁能帮上忙吗?

EN

回答 3

Stack Overflow用户

发布于 2020-03-18 21:33:27

是的,这会给出不同的结果,当你单独运行和案例陈述。个人将给出准确的计数,而案例陈述则会以这种方式给出数据。

选择distance_diff <= 50然后'50m‘时的情况--给出小于50的数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
         when distance\_diff <= 100 then '100m' -- will give the data between 50 and 100 as the results were already included as part of 50M              when distance\_diff <= 200 then '200m' --this will give between 100 and 200 as < 100 is already part of above statement. 

为了获得精确的计数,您可以用这种方式编写case语句。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select 
       count(distinct case when distance_diff <= 50  then  device_ifa end ) 
Less_than_50, count(distinct case when distance_diff <= 100  then  device_ifa end ) 
Less_than_100 , count(distinct case when distance_diff <= 200  then  device_ifa end ) 
Less_than_200 from  table_1 
group by 1 order by 1
票数 1
EN

Stack Overflow用户

发布于 2020-03-18 22:14:02

您获得不同计数的原因是由于CASE语句功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case when distance_diff <= 50 then '50m'
        when distance_diff <= 100 then '100m'
        when distance_diff <= 200 then '200m' 
   end as radius

当您运行上述查询时,数据中存在重叠(例如,<=100条件也包括<=50,<=200类似)。

上述查询的行为如何?:

1.distance_Diff <= 50 :这将将从0到50的所有distance_diff值标记为'50m‘

2.distance_Diff <= 100 :这将将从51到100的所有distance_diff值标记为“100 m”

3.distance_Diff <= 200 :这将将所有distance_diff值从101-200标记为'200m‘。

所以条件1将首先执行。然后,它将检查第二个条件的剩余无标记值,然后执行最后第三个条件。

就像在第一个查询中进行单独计数一样,其中也包括重叠值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select count(distinct device_ifa) from table_1 where distance_diff <= 50  --  41504

以上查询计数为distance_diff,从0到50。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select count(distinct device_ifa) from table_1  where distance_diff <= 100  --  69469

以上查询计数为distance_diff,从0到100。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select count(distinct device_ifa) from table_1 where distance_diff <= 200  --  100859

上面的查询计数为distance_diff,从0到200。

现在我明白了,为什么结果在这两个查询中是不同的。

票数 0
EN

Stack Overflow用户

发布于 2020-03-19 04:11:39

你似乎在问为什么这些结果会不同。

原因很简单。在第一个查询中,在所有三个组中计算一个25的distance_diff。它只在第二个< 50组中计算。

第一个返回一个累积的不同计数。第二个只返回一个范围的不同计数。

如果更改特定范围的单个查询筛选器,则结果应该匹配:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
where distance_diff <= 50
where distance_diff > 50 distance_diff <= 100
where distance_diff > 100 distance_diff <= 200
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60751309

复制
相关文章
MySQL 查询case
一、问题描述 一个经销商对应多个经营人员,一个经营人员有多张照片,查询一个经销商下的所有经营人员的最近照片 二、数据库表 1、经营人员表
week
2018/08/27
1.1K0
MySQL 查询case
sql:case when
https://www.cnblogs.com/kirinboy/archive/2010/01/11/1644108.html
ke1th
2019/08/14
5780
SQL中的CASE WHEN使用
SQL中的CASE WHEN使用 Case具有两种格式。简单Case函数和Case搜索函数。 –简单Case函数 CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘2’ THEN ‘女’ ELSE ‘其他’ END –Case搜索函数(WHEN 后还可以用 AND ,OR ) CASE WHEN sex = ‘1’ THEN ‘男’ WHEN sex = ‘2’ THEN ‘女’ ELSE ‘其他’ END
javascript.shop
2019/09/04
2.3K0
sql查询基本语法_以下select语句语法正确的是
Select [select选项] 字段列表[字段别名]/* from 数据源 [where 字句] [group by子句 ][having 子句][order by 子句][limit 子句];
全栈程序员站长
2022/10/04
2.9K0
sql查询基本语法_以下select语句语法正确的是
java case when用法_sql case when 嵌套
客户那边通过一个“时间范围筛选”控件来动态修改图表的数据。其很多指标的计算逻辑类似于:
全栈程序员站长
2022/10/04
3.1K0
Case Study:读取设备的温度值?
如果让你去读取 Android 设备的温度,并且告诉你这些温度的值都存在 /sys/class/thermal/thermal_zone 开头的目录下的 temp 文件当中,我们只需要读取它的平均值即可,那么我们要怎么去写这样的程序呢?
bennyhuo
2020/02/20
1.2K0
SQL查询和删除重复值的操作方法
如题,SQL查询和删除重复值,例子是在Oracle环境下,类似写法网上很多。 1、利用distinct关键字去重 2、利用group by分组去重(这里没有实验出来就不写了) 3、利用rowid查询去重(个人推荐这个,rowid查询速度是最快的)
用户8965210
2021/08/31
2.2K0
消除代码中的 if-else/switch-case的正确姿势
  在很多时候,我们代码中会有很多分支,而且分支下面的代码又有一些复杂的逻辑,相信很多人都喜欢用 if-else/switch-case 去实现。做的不好的会直接把实现的代码放在 if-else/switch-case 的分支之下:
明明如月学长
2021/08/27
9040
SQL CASE 表达式
CASE 表达式分为简单表达式与搜索表达式,其中搜索表达式可以覆盖简单表达式的全部能力,我也建议只写搜索表达式,而不要写简单表达式。
黄子毅
2022/04/18
8190
为什么switch里的case没有break不行
之所以这么笃定地回答这个问题,并不是我知道其中原理,而是之前在一个群里,有人问了同类型的问题,我瞥了一眼记住了答案,所以才依葫芦画瓢。
叫我阿柒啊
2022/05/09
7870
为什么switch里的case没有break不行
SQL使用(一):如何使用SQL语句去查询第二高的值
初看了一眼题时,脑子还有一点迷糊,对于数值最大的和最小的,可以使用max和min去查询出来,但对于第N的就不好找了,思考了一会儿了,心里大致有二个思路:
王豆豆
2020/07/24
5.8K0
SQL使用(一):如何使用SQL语句去查询第二高的值
Mysql常用sql语句(10)- is null 空值查询
https://www.cnblogs.com/poloyy/category/1683347.html
小菠萝测试笔记
2020/06/09
4.4K0
Mysql常用sql语句(10)- is null 空值查询
SQL Case when 的使用方法
这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。 还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
大道七哥
2019/09/10
9240
sql 表有没有自增列,插入自增列值
创建一个表 create table demoTb ( ID int identity(1,1) primary key, name varchar(30) )   查看有没有自增列  有就返回YES IF ((SELECT OBJECTPROPERTY( OBJECT_ID(N'demoTb'), 'TableHasIdentity')) = 1) PRINT 'Yes' ELSE PRINT 'No'   如果想插入自增列的值就 declare @tableName varchar
lpxxn
2018/01/31
1.1K0
sql 表有没有自增列,插入自增列值
sql 再not in 子查询有null值的奇怪现象
–如果null参与算术运算,则该算术表达式的值为null。(例如:+,-,*,/ 加减乘除)
斯文的程序
2019/11/07
1.8K0
order by case when执行优先级_sql case语句
select * from table where 条件1 AND 条件2 OR 条件3
全栈程序员站长
2022/10/02
1.4K0
分批拼接SQL IN 查询需要的ID字段值,解决IN 查询的ID过多问题
SQL查询使用的IN条件字段很多的时候,会造成SQL语句很长,大概SQL语句不能超过8K个字符,也有说IN不能超过1000个条件,总之太长了不行,需要拆分条件分批处理。下面提供一个将Int类型的条件字段值进行字符串拼接的方法。看代码:
用户1177503
2021/04/01
2.5K0
大规模SQL分析:为正确的工作选择正确的SQL引擎
我们都渴望获得数据。不仅是更多的数据……还有新的数据类型,以便我们能够最好地了解我们的产品、客户和市场。我们正在寻找有关各种形状和大小(结构化和非结构化)的最新可用数据的实时洞察力。我们希望拥抱新一代的业务和技术专业人员,这些人员是对数据和能够改变数据与我们生活息息相关的新一代技术有真正热情。
大数据杂货铺
2020/02/11
1.1K0
大规模SQL分析:为正确的工作选择正确的SQL引擎
sql的嵌套查询_sql子查询嵌套优化
最近在做各类小应用,用到了MYSQL,有时候会用到一些比较复杂的嵌套查询,在研究怎么通过SQL实现这些。 假设下面这张表(stu)描述学生的基本信息:
全栈程序员站长
2022/09/22
5.2K0
SQL中CASE表达式的妙用
case 表达式分为搜索表达式和简单表达式,由于搜索表达式包含了简单表达式的所有用法,此处仅介绍搜索表达式的用法。
披头
2020/08/17
1K0

相似问题

添加SQL Case以在更新查询中提供默认值

31

Oracle SQL查询没有显示正确的值

22

sql查询没有选择我需要的正确值

30

Select语句具有提供select值的Case - SQL Server

29

valuewhen()没有提供正确的值

315
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文