1. 程式人生 > 其它 >MySQL小筆記

MySQL小筆記

技術標籤:專案小筆記mysql

sql題,簡單記錄,以後優化

  1. 查詢年齡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);

在這裡插入圖片描述

  1. 查詢換入換出發票的金額之和
##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');