当前位置:网站首页>Usage of case when then else end statement
Usage of case when then else end statement
2022-07-04 10:57:00 【ths512】
- SELECT a.managecom,
- a.subtype,
- count(*) loadsucc,
- sum(case when a.state in ('4', '5', '6', '7', '8', '9') then 1 else 0 end) recogsucc,
- sum(case when a.state in ('3', '12', '13') then 1 else 0 end) recogfail,
- sum(case when a.state in ('1', '2') then 1 else 0 end) waitrecog
- FROM ocr_docdetail a, ocr_loaddetail c
- WHERE 1 = 1
- and a.managecom like '86%'
- and a.managecom = c.managecom
- and a.bussno = c.bussno
- and a.subtype = c.subtype
- and c.loadstate = 0
- and c.scandate >= date '2012-07-29'
- and c.scandate <= date '2013-01-07'
- group by a.managecom, a.subtype
- order by a.managecom, a.subtype;
case There are two formats . Simple case Functions and case The search function .
-- Simple case function
case sex
when '1' then ' male '
when '2' then ' Woman '
else ' other ' end
--case The search function
case when sex = '1' then ' male '
when sex = '2' then ' Woman '
else ' other ' end
These two ways , Can achieve the same function . Simple case The writing of function is relatively simple , But and case Search function , There will be some functional limitations , For example, write a decision form .
There is another issue that needs attention ,case Function returns only the first value that matches the condition , The rest case Parts will be automatically ignored .
-- for instance , The following paragraph sql, You'll never get “ The second category ” This result
case when col_1 in ( 'a', 'b') then' The first category '
when col_1 in ('a') then ' The second category '
else ' other ' end
So let's see , Use case Functions can do something .
One , The known data is grouped in another way , analysis .
Here's the data :( To see better , I didn't use the country code , It's the name of the country primary key)
Country (country) | Population (population) |
China | 600 |
The United States | 100 |
Canada | 100 |
The British | 200 |
The French | 300 |
Japan | 250 |
Germany | 200 |
Mexico | 50 |
India | 250 |
According to the population data of this country , Count the population of Asia and North America . We should get the following result .
continent | Population |
Asia | 1100 |
In North America | 250 |
other | 700 |
I want to solve this problem , What would you do ? Generate a continent with code Of view, It's a solution , But it's hard to change the way of statistics dynamically .
If used case function ,sql The code is as follows :
select sum(population),
case country
when ' China ' then' Asia '
when ' India ' then' Asia '
when ' Japan ' then' Asia '
when ' The United States ' then' In North America '
when ' Canada ' then' In North America '
when ' Mexico ' then' In North America '
else ' other ' end
from table_a
group by case country
when ' China ' then' Asia '
when ' India ' then' Asia '
when ' Japan ' then' Asia '
when ' The United States ' then' In North America '
when ' Canada ' then' In North America '
when ' Mexico ' then' In North America '
else ' other ' end;
notes :
In the example above , Actually select There are two fields :sum(population), case country;
country There are many values in the field , Yes “ China , The United States , Japan , Canada ...” wait ,select After case when then else end In fact, it is equivalent to country There are three types of values for :" Asia , In North America , other ";
There is no from hinder case when sentence , The result set is like this ,sum What you get is the population population Total of , So we need to population grouping , There's the back group by:
hinder case when sentence , In fact, the fields queried earlier case country Grouping , Divide into three groups :" Asia , In North America , other ", Then you can get the result
alike , We can also use this method to determine the salary grade , And count the number of people at each level .sql The code is as follows ;
select
case when salary <= 500 then '1'
when salary > 500 and salary <= 600 then '2'
when salary > 600 and salary <= 800 then '3'
when salary > 800 and salary <= 1000 then '4'
else null end salary_class,
count(*)
from table_a
group by
case when salary <= 500 then '1'
when salary > 500 and salary <= 600 then '2'
when salary > 600 and salary <= 800 then '3'
when salary > 800 and salary <= 1000 then '4'
else null end;
Two , Use one sql Statement to complete the grouping of different conditions .
Here's the data
Country (country) | Gender (sex) | Population (population) |
China | 1 | 340 |
China | 2 | 260 |
The United States | 1 | 45 |
The United States | 2 | 55 |
Canada | 1 | 51 |
Canada | 2 | 49 |
The British | 1 | 40 |
The British | 2 | 60 |
Grouped by country and gender , The results are as follows
Country | male | Woman |
China | 340 | 260 |
The United States | 45 | 55 |
Canada | 51 | 49 |
The British | 40 | 60 |
In general , use union You can also query with a single statement . But that increases consumption ( Two select part ), and sql The statements will be longer .
Here's one that uses case Function to complete this function
select country,
sum( case when sex = '1' then
population else 0 end), -- Male population
sum( case when sex = '2' then
population else 0 end) -- Female population
from table_a
group by country;
So we use select, Complete the output form of the two-dimensional table , It fully shows that case The power of functions .
3、 ... and , stay check Use in case function .
stay check Use in case Functions are very good solutions in many cases . Maybe a lot of people don't have to check, Well, I suggest you try the following example as well sql Use in check.
Let's take an example
company a, This company has a policy , The salary of female staff must be higher than 1000 block . If used check and case To show , As shown below
constraint check_salary check
( case when sex = '2'
then case when salary > 1000
then 1 else 0 end
else 1 end = 1 )
If only used check, As shown below
constraint check_salary check
( sex = '2' and salary > 1000 )
The conditions of female staff are met , Male staff can't input .
边栏推荐
- Aike AI frontier promotion (2.14)
- Performance test method
- Article publishing experiment
- LVS+Keepalived实现四层负载及高可用
- How to deal with the relationship between colleagues
- 守护进程Xinted和日志记录Syslogd
- Performance test process
- Introduction to canoe automatic test system
- Oracle11g | getting started with database. It's enough to read this 10000 word analysis
- 2、 Operators and branches
猜你喜欢
Elevator dispatching (pairing project) ②
C language structure to realize simple address book
Canoe: what is vtsystem
Canoe - the third simulation project - bus simulation - 3-2 project implementation
Using Lua to realize 99 multiplication table
[Galaxy Kirin V10] [server] failed to start the network
Ten key performance indicators of software applications
How do microservices aggregate API documents? This wave of show~
F12 clear the cookies of the corresponding web address
Send a request using paste raw text
随机推荐
Huge number multiplication (C language)
Cacti主机模板之定制版
Appscan installation error: unable to install from Net runtime security policy logout appscan solution
Canoe - the third simulation project - bus simulation - 3-1 project implementation
Failed to configure a DataSource: ‘url‘ attribute is not specified... Bug solution
DNS hijacking
VPS安装Virtualmin面板
How do microservices aggregate API documents? This wave of show~
The bamboo shadow sweeps the steps, the dust does not move, and the moon passes through the marsh without trace -- in-depth understanding of the pointer
Day7 list and dictionary jobs
Introduction to Lichuang EDA
Hidden C2 tunnel -- use of icmpsh of ICMP
Canoe - the third simulation project - bus simulation-1 overview
Pod management
For and while loops
R built in data set
[Galaxy Kirin V10] [server] set time synchronization of intranet server
Canoe - the third simulation project - bus simulation - 3-2 project implementation
/*Write a loop to output the elements of the list container in reverse order*/
Appscan installation steps