当前位置:网站首页>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 .
边栏推荐
- Hidden C2 tunnel -- use of icmpsh of ICMP
- MBG combat zero basis
- JMeter correlation technology
- iptables导致Heartbeat脑裂
- Ten key performance indicators of software applications
- 20 kinds of hardware engineers must be aware of basic components | the latest update to 8.13
- 本地Mysql忘记密码的修改方法(windows)
- [advantages and disadvantages of outsourcing software development in 2022]
- How to use diff and patch to update the source code
- Canoe: what is vtsystem
猜你喜欢
[Galaxy Kirin V10] [desktop] cannot add printer
DNS hijacking
Deepmind proposed a Zuan AI, which specially outputs network attack language
Canoe test: two ways to create CAPL test module
Fundamentals of software testing
Canoe - the third simulation project - bus simulation - 2 function introduction, network topology
[test theory] test process management
[Galaxy Kirin V10] [server] soft RAID configuration
Application and Optimization Practice of redis in vivo push platform
[Galaxy Kirin V10] [server] failed to start the network
随机推荐
Performance test process
F12 clear the cookies of the corresponding web address
Dictionaries and collections
Network connection (II) three handshakes, four waves, socket essence, packaging of network packets, TCP header, IP header, ACK confirmation, sliding window, results of network packets, working mode of
Unittest+airtest+beatiulreport combine the three to make a beautiful test report
Const's constant member function after the function; Form, characteristics and use of inline function
VI text editor and user rights management, group management and time management
C language structure to realize simple address book
Introduction to canoe automatic test system
Open the neural network "black box"! Unveil the mystery of machine learning system with natural language
[test theory] test phase analysis (unit, integration, system test)
regular expression
Canoe: what is vtsystem
Snake (C language)
[Galaxy Kirin V10] [desktop] can't be started or the screen is black
MFC document view framework (relationship between classes)
Advanced order of function
Canoe - the second simulation project -xvihicle1 bus database design (operation)
Learning XML DOM -- a typical model for parsing XML documents
[Galaxy Kirin V10] [server] grub default password