如何用一句sql语句实现查取值的和小于某个范围的所有值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用一句sql语句实现查取值的和小于某个范围的所有值相关的知识,希望对你有一定的参考价值。

比如表number
id value
1 3
2 15
3 6
4 9
5 7
按id排序后,求values和小于30的所有id,只可以用一条sql语句,不使用plsql,单纯用语句实现

参考技术A 表 a ....,total,...
表 b ...,total,...
查询 a,b 中 total 含有 各种可能相同的数据
select * from a
where total in (select total from a group by total having count(total) > 10)
union
select * from b
where total in (select total from b group by total having count(total) > 10)
;
参考技术B select * FROM number
WHERE id <=
(
SELECT MAX(id) FROM
(
SELECT m2.id, SUM(m1.value)
FROM number m1
INNER JOIN number m2 ON m1.id <=m2.id

GROUP BY m2.id
HAVING SUM(m1.value) < 30 order by id
) v
)

使用SQL语句如何实现条件判断

客户需求是咨询如何用SQL结合decode函数实现条件判断,比如当某一列数值大于500,对应类型“大于500”;当某一列数值小于500,对应类型“小于500”。
实际decode函数无法实现这个功能,实现要用到case when,为此我构造一个简单的示例来直观演示:

create table test302(id number, name varchar2(20));

insert into test302 values (499, ‘aaa‘);
insert into test302 values (500, ‘bbb‘);
insert into test302 values (501, ‘ccc‘);
commit;

测试包含case when的SQL:

select u.id,u.name,
   (case 
    when u.id>500 then ‘大于500‘
    when u.id<500 then ‘小于500‘
    else ‘等于500‘
    end
   )type
from test302 u;

得到结果如下:

SQL> select u.id,u.name,
  2     (case 
  3      when u.id>500 then ‘大于500‘
  4      when u.id<500 then ‘小于500‘
  5      else ‘等于500‘
  6      end
  7     )type
  8  from test302 u;

        ID NAME                 TYPE
---------- -------------------- ---------
       499 aaa                  小于500
       500 bbb                  等于500
       501 ccc                  大于500

满足客户用SQL实现某列值条件判断的需求,我们可以看到这个例子非常简单,但这也是大多数运维dba的短板--SQL相关知识欠缺,还是要学习积累的。


以上是关于如何用一句sql语句实现查取值的和小于某个范围的所有值的主要内容,如果未能解决你的问题,请参考以下文章

如何用sql语句筛选时间最新的数据

如何用sql语句查一字符串的长度?

如何用SQL语句实现某个字段数为随机数?

sql语句进行模糊查询时如何同时用一句话筛选多个关键词

如何用SQL循环查询语句

c++中产生不重复的随机数