当前位置:网站首页>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 .
边栏推荐
- Interview and lecture summary 1
- JMeter Foundation
- I What is security testing
- Dictionaries and collections
- Using SA token to solve websocket handshake authentication
- Swagger and OpenAPI
- Heartbeat启动后无反应
- 本地Mysql忘记密码的修改方法(windows)[通俗易懂]
- Canoe the second simulation engineering xvehicle 3 CAPL programming (operation)
- shell awk
猜你喜欢
C language - stack
Elevator dispatching (pairing project) ③
XMIND installation
MFC document view framework (relationship between classes)
2022 AAAI fellow release! Yan Shuicheng, chief scientist of sail, and Feng Yan, Professor of Hong Kong University of science and technology, were selected
Canoe - description of common database attributes
Canoe - the third simulation project - bus simulation - 3-1 project implementation
JMeter correlation technology
[Galaxy Kirin V10] [desktop and server] FRP intranet penetration
Recursion and divide and conquer strategy
随机推荐
Dichotomy search (C language)
The most ideal automated testing model, how to achieve layering of automated testing
Recursion and divide and conquer strategy
[Galaxy Kirin V10] [desktop] build NFS to realize disk sharing
Canoe: what is vtsystem
[Galaxy Kirin V10] [server] NUMA Technology
Function introduction of canbedded component
51 data analysis post
[Galaxy Kirin V10] [server] iSCSI deployment
Quick sort (C language)
[Galaxy Kirin V10] [desktop] login system flash back
/*The rewriter outputs the contents of the IA array. It is required that the type defined by typedef cannot be used in the outer loop*/
Postman interface test
Canoe - the third simulation project - bus simulation - 3-2 project implementation
20 kinds of hardware engineers must be aware of basic components | the latest update to 8.13
What is an excellent architect in my heart?
F12 clear the cookies of the corresponding web address
[test theory] test the dimension of professional ability
[Galaxy Kirin V10] [desktop] printer
Basic function exercises