MySQL小筆記
阿新 • • 發佈:2021-01-18
sql題,簡單記錄,以後優化
- 查詢年齡18-20歲的人員,並且每個年齡的人數需要大於2個人
--查詢年齡18-20歲的人員,並且每個年齡的人數需要大於2個人
--並且才是需要重點處理的條件
select *
from User_temp b
where b.age in (select a.age
from (select t.age age
from User_temp t
where t.age between 18 and 20
group by t.age
having count(t.age) > 2) a);
-- Create table
create table USER_TEMP
(
id VARCHAR2(20) not null,
name VARCHAR2(32),
age NUMBER
)
insert into User_temp (ID, NAME, AGE) values ('18404', 'zhao', 18);
insert into User_temp ( ID, NAME, AGE) values ('18405', 'qian', 19);
insert into User_temp (ID, NAME, AGE) values ('18406', 'sun', 20);
insert into User_temp (ID, NAME, AGE) values ('18407', 'li', 21);
insert into User_temp (ID, NAME, AGE) values ('18408', 'zhou', 18);
insert into User_temp (ID, NAME, AGE) values ('18409', 'wu', 19);
insert into User_temp (ID, NAME, AGE) values ('18410', 'zhen', 20);
insert into User_temp (ID, NAME, AGE) values ('18411', 'wang', 18);
insert into User_temp (ID, NAME, AGE) values ('18412', 'zhu', 19);
insert into User_temp (ID, NAME, AGE) values ('18413', 'liu', 20);
- 查詢換入換出發票的金額之和
##postgresql寫法
select b3.ctr_id_1 合同號,
b3.rltv_id_1 換入發票號,
b3.amt_1 換入金額,
b3.rltv_id_2 換出發票號,
b3.amt_2 換出金額
from ((select t1.ctr_id as ctr_id_1,
string_agg(t1.rltv_id, ',') as rltv_id_1,
sum(t1.amt) as amt_1
from rltv_dtl t1
where t1.rltv_cd = '1'
group by t1.ctr_id)as b1 left join
(select t2.ctr_id as ctr_id_2,
string_agg(t2.rltv_id, ',') as rltv_id_2,
sum(t1.amt) as amt_2
from rltv_dtl t2
where t2.rltv_cd = '2'
group by t2.ctr_id) as b2 on b1.ctr_id_1 = b2.ctr_id_2) as b3;
##Oracle寫法
--create table
create table HR.RLTV_DTL
(
id VARCHAR2(20) not null,
rltv_id VARCHAR2(32),
ctr_id VARCHAR2(32),
amt NUMBER,
rltv_cd VARCHAR2(1)
)
insert into hr.RLTV_DTL (ID, RLTV_ID, CTR_ID, AMT, RLTV_CD)
values ('18404', 'FP18404', 'HT18404', 1000, '1');
insert into hr.RLTV_DTL (ID, RLTV_ID, CTR_ID, AMT, RLTV_CD)
values ('18405', 'FP18405', 'HT18404', 2000, '2');
insert into hr.RLTV_DTL (ID, RLTV_ID, CTR_ID, AMT, RLTV_CD)
values ('18406', 'FP18406', 'HT18404', 500, '1');
insert into hr.RLTV_DTL (ID, RLTV_ID, CTR_ID, AMT, RLTV_CD)
values ('18407', 'FP18407', 'HT18405', 2000, '1');
insert into hr.RLTV_DTL (ID, RLTV_ID, CTR_ID, AMT, RLTV_CD)
values ('18408', 'FP18408', 'HT18405', 2500, '2');
insert into hr.RLTV_DTL (ID, RLTV_ID, CTR_ID, AMT, RLTV_CD)
values ('18409', 'FP18409', 'HT18405', 5000, '2');