Mysql 读取select时出现问题,条件为,但结果为空

Mysql 读取select时出现问题,条件为,但结果为空,mysql,xampp,Mysql,Xampp,我有一个问题,在执行选择WO的存储过程时,条件是结果为NULL。我有3个存储过程要为结果执行。我用于数据的表格是: ''' DROP TABLE IF EXISTS tabel_p1_input2; CREATE TABLE IF NOT EXISTS tabel_p1_input2( no_daftar INTEGER NOT NULL PRIMARY KEY ,k1 NUMERIC(7,4) NOT NULL ,k2 NUMERIC(7

我有一个问题,在执行选择WO的存储过程时,条件是结果为NULL。我有3个存储过程要为结果执行。我用于数据的表格是:

     '''
DROP TABLE IF EXISTS tabel_p1_input2;
CREATE TABLE IF NOT EXISTS tabel_p1_input2(
   no_daftar INTEGER  NOT NULL PRIMARY KEY 
  ,k1        NUMERIC(7,4) NOT NULL
  ,k2        NUMERIC(7,4) NOT NULL
  ,k3        NUMERIC(7,0) NOT NULL
  ,k4        NUMERIC(7,0) NOT NULL
  ,tahun     INTEGER  NOT NULL
);

DROP TABLE IF EXISTS tabel_p2_normalisasi;
CREATE TABLE IF NOT EXISTS tabel_p2_normalisasi(
   aspek  VARCHAR(2) NOT NULL PRIMARY KEY
  ,minval NUMERIC(7,4) NOT NULL
  ,maxval NUMERIC(7,4) NOT NULL
  ,val    INT  NOT NULL
  ,tahun  INTEGER  NOT NULL
);

DROP TABLE IF EXISTS tabel_p3_konversi;
CREATE TABLE IF NOT EXISTS tabel_p3_konversi(
   no_daftar INTEGER  NOT NULL PRIMARY KEY 
  ,k1        INTEGER  NOT NULL
  ,k2        INTEGER  NOT NULL
  ,k3        INTEGER  NOT NULL
  ,k4        INTEGER  NOT NULL
  ,tahun     INTEGER  NOT NULL
);

        DROP TABLE IF EXISTS detail_nilai;
    CREATE TABLE IF NOT EXISTS detail_nilai(
       id            INTEGER  NOT NULL PRIMARY KEY 
      ,no_daftar     INTEGER  NOT NULL
      ,kode_kriteria VARCHAR(3) NOT NULL
      ,nilai         INTEGER  NOT NULL
      ,tahun         INTEGER  NOT NULL
    );
    INSERT INTO detail_nilai(id,no_daftar,kode_kriteria,nilai,tahun) VALUES
     (1,001,'P01',100,2019)
    ,(2,001,'P02',50,2019)
    ,(3,001,'P03',100,2019)
    ,(4,001,'K01',100,2019)
    ,(5,001,'K02',100,2019)
    ,(6,001,'K03',0,2019)
    ,(7,001,'J01',70,2019)
    ,(8,001,'J02',85,2019)
    ,(9,001,'J03',85,2019)
    ,(10,001,'B01',50,2019)
    ,(11,001,'B02',100,2019)
    ,(12,001,'B03',100,2019)
    ,(13,001,'B04',0,2019)
    ,(14,001,'B05',50,2019)
    ,(15,002,'P01',100,2019)
    ,(16,002,'P02',100,2019)
    ,(17,002,'P03',100,2019)
    ,(18,002,'K01',100,2019)
    ,(19,002,'K02',100,2019)
    ,(20,002,'K03',100,2019)
    ,(21,002,'J01',85,2019)
    ,(22,002,'J02',70,2019)
    ,(23,002,'J03',85,2019)
    ,(24,002,'B01',0,2019)
    ,(25,002,'B02',100,2019)
    ,(26,002,'B03',50,2019)
    ,(27,002,'B04',0,2019)
    ,(28,002,'B05',0,2019)
    ,(29,003,'P01',100,2019)
    ,(30,003,'P02',50,2019)
    ,(31,003,'P03',100,2019)
    ,(32,003,'K01',0,2019)
    ,(33,003,'K02',0,2019)
    ,(34,003,'K03',0,2019)
    ,(35,003,'J01',85,2019)
    ,(36,003,'J02',70,2019)
    ,(37,003,'J03',85,2019)
    ,(38,003,'B01',0,2019)
    ,(39,003,'B02',0,2019)
    ,(40,003,'B03',100,2019)
    ,(41,003,'B04',100,2019)
    ,(42,003,'B05',100,2019)
    ,(43,004,'P01',100,2019)
    ,(44,004,'P02',0,2019)
    ,(45,004,'P03',0,2019)
    ,(46,004,'K01',100,2019)
    ,(47,004,'K02',100,2019)
    ,(48,004,'K03',100,2019)
    ,(49,004,'J01',70,2019)
    ,(50,004,'J02',85,2019)
    ,(51,004,'J03',85,2019)
    ,(52,004,'B01',0,2019)
    ,(53,004,'B02',100,2019)
    ,(54,004,'B03',0,2019)
    ,(55,004,'B04',0,2019)
    ,(56,004,'B05',100,2019)
    ,(57,005,'P01',0,2019)
    ,(58,005,'P02',100,2019)
    ,(59,005,'P03',100,2019)
    ,(60,005,'K01',0,2019)
    ,(61,005,'K02',0,2019)
    ,(62,005,'K03',0,2019)
    ,(63,005,'J01',85,2019)
    ,(64,005,'J02',100,2019)
    ,(65,005,'J03',70,2019)
    ,(66,005,'B01',50,2019)
    ,(67,005,'B02',0,2019)
    ,(68,005,'B03',50,2019)
    ,(69,005,'B04',0,2019)
    ,(70,005,'B05',50,2019)
    ,(71,006,'P01',0,2019)
    ,(72,006,'P02',100,2019)
    ,(73,006,'P03',100,2019)
    ,(74,006,'K01',0,2019)
    ,(75,006,'K02',100,2019)
    ,(76,006,'K03',100,2019)
    ,(77,006,'J01',85,2019)
    ,(78,006,'J02',85,2019)
    ,(79,006,'J03',70,2019)
    ,(80,006,'B01',50,2019)
    ,(81,006,'B02',0,2019)
    ,(82,006,'B03',100,2019)
    ,(83,006,'B04',0,2019)
    ,(84,006,'B05',50,2019)
    ,(85,007,'P01',100,2019)
    ,(86,007,'P02',50,2019)
    ,(87,007,'P03',0,2019)
    ,(88,007,'K01',100,2019)
    ,(89,007,'K02',100,2019)
    ,(90,007,'K03',0,2019)
    ,(91,007,'J01',85,2019)
    ,(92,007,'J02',100,2019)
    ,(93,007,'J03',100,2019)
    ,(94,007,'B01',100,2019)
    ,(95,007,'B02',50,2019)
    ,(96,007,'B03',50,2019)
    ,(97,007,'B04',0,2019)
    ,(98,007,'B05',100,2019)
    ,(99,008,'P01',100,2019)
    ,(100,008,'P02',50,2019)
    ,(101,008,'P03',100,2019)
    ,(102,008,'K01',100,2019)
    ,(103,008,'K02',100,2019)
    ,(104,008,'K03',100,2019)
    ,(105,008,'J01',70,2019)
    ,(106,008,'J02',85,2019)
    ,(107,008,'J03',85,2019)
    ,(108,008,'B01',50,2019)
    ,(109,008,'B02',50,2019)
    ,(110,008,'B03',100,2019)
    ,(111,008,'B04',50,2019)
    ,(112,008,'B05',50,2019)
    ,(113,009,'P01',100,2019)
    ,(114,009,'P02',50,2019)
    ,(115,009,'P03',100,2019)
    ,(116,009,'K01',100,2019)
    ,(117,009,'K02',0,2019)
    ,(118,009,'K03',100,2019)
    ,(119,009,'J01',100,2019)
    ,(120,009,'J02',100,2019)
    ,(121,009,'J03',85,2019)
    ,(122,009,'B01',100,2019)
    ,(123,009,'B02',0,2019)
    ,(124,009,'B03',100,2019)
    ,(125,009,'B04',100,2019)
    ,(126,009,'B05',100,2019)
    ,(127,010,'P01',0,2019)
    ,(128,010,'P02',50,2019)
    ,(129,010,'P03',0,2019)
    ,(130,010,'K01',0,2019)
    ,(131,010,'K02',100,2019)
    ,(132,010,'K03',100,2019)
    ,(133,010,'J01',70,2019)
    ,(134,010,'J02',100,2019)
    ,(135,010,'J03',85,2019)
    ,(136,010,'B01',50,2019)
    ,(137,010,'B02',100,2019)
    ,(138,010,'B03',0,2019)
    ,(139,010,'B04',0,2019)
    ,(140,010,'B05',100,2019);
        '''
第一个SP:

'''
BEGIN
 truncate table tabel_p1_input2;
 insert into tabel_p1_input2 
  select distinct(dn.no_daftar) as no_daftar,
  sum(case when ap.kode_aspek='k1' then dn.nilai else 0 end)/(select count(skr.kode_kriteria) from kriteria skr where skr.kode_aspek='k1') as k1, 
  sum(case when ap.kode_aspek='k2' then dn.nilai else 0 end)/(select count(skr.kode_kriteria) from kriteria skr where skr.kode_aspek='k2') as k2, 
  sum(case when ap.kode_aspek='k3' then dn.nilai else 0 end)/(select count(skr.kode_kriteria) from kriteria skr where skr.kode_aspek='k3') as k3, 
  sum(case when ap.kode_aspek='k4' then dn.nilai else 0 end)/(select count(skr.kode_kriteria) from kriteria skr where skr.kode_aspek='k4') as k4,
  thn
  from detail_nilai dn 
   left outer join  kriteria kr on dn.kode_kriteria =kr.kode_kriteria 
   left outer join aspek ap on kr.kode_aspek=ap.kode_aspek where dn.tahun=thn
   group by dn.no_daftar;
  select b.nama,a.k1,a.k2,a.k3,a.k4 from tabel_p1_input2 a left outer join siswa b on a.no_daftar=b.no_daftar where a.tahun=thn; 
END
'''
第二个SP:

'''
BEGIN
 declare naspek,nnormal int;
 declare val1_1,val1_2,val1_3,val1_4,val2_1,val2_2,val2_3,val2_4,incval1,incval2,incval3,incval4,
 maxval1,maxval2,maxval3,maxval4,
 minval1,minval2,minval3,minval4 float;
 truncate table tabel_p2_normalisasi;
 select max(k1),min(k1),max(k2),min(k2),max(k3),min(k3),max(k4),min(k4) from tabel_p1_input2 where tahun=thn
 into maxval1,minval1,maxval2,minval2,maxval3,minval3,maxval4,minval4;
 set incval1=(maxval1-minval1)/5,incval2=(maxval2-minval2)/5,incval3=(maxval3-minval3)/5,incval4=(maxval4-minval4)/5,
   val1_1=minval1,val1_2=minval2,val1_3=minval3,val1_4=minval4,
   val2_1=minval1+incval1,val2_2=minval2+incval2,val2_3=minval3+incval3,val2_4=minval4+incval4;
  set nnormal=100; 
  while nnormal>=20 do
   insert into tabel_p2_normalisasi values ('K1',val1_1,val2_1,nnormal,thn),('K2',val1_2,val2_2,nnormal,thn)
   ,('K3',val1_3,val2_3,nnormal,thn),('K4',val1_4,val2_4,nnormal,thn);
   set val1_1=val2_1+0.1,val1_2=val2_2+0.1,val1_3=val2_3+0.1,val1_4=val2_4+0.1,nnormal=nnormal-20;
   if(nnormal=20) then set val2_1=maxval1,val2_2=maxval2,val2_3=maxval3,val2_4=maxval4;
   else set val2_1=val2_1+incval1,val2_2=val2_2+incval2,val2_3=val2_3+incval3,val2_4=val2_4+incval4;
   end if;
  end while;
 select aspek,minval,maxval,val from tabel_p2_normalisasi  where tahun=thn order by aspek;
END
'''
用于执行结果的第三个SP:

'''
BEGIN
 declare valk1,valk2,valk3,valk4 float;
 declare loopfinish int default 0;
 declare valnodaftar varchar(20);
 declare cursorkonversi cursor for  
 select no_daftar,k1,k2,k3,k4 from tabel_p1_input2 where tahun=thn order by no_daftar; 
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET loopfinish = 1;
 #set SQL_SAFE_UPDATES=0;
 truncate table tabel_p3_konversi; 
 open cursorkonversi;
 konversi: LOOP 
  FETCH cursorkonversi INTO valnodaftar,valk1,valk2,valk3,valk4;
  if loopfinish=1 then leave konversi; end if; 
  insert into tabel_p3_konversi values (valnodaftar
  , (select val from tabel_p2_normalisasi where valk1>=minval and valk1<=maxval and aspek='K1') 
  , (select val from tabel_p2_normalisasi where valk2>=minval and valk2<=maxval and aspek='K2')
  , (select val from tabel_p2_normalisasi where valk3>=minval and valk3<=maxval and aspek='K3')
  , (select val from tabel_p2_normalisasi where valk4>=minval and valk4<=maxval and aspek='K4'),thn);
 end loop konversi; 
 close cursorkonversi;
 #set SQL_SAFE_UPDATES=1;
 select b.nama,a.k1,a.k2,a.k3,a.k4 from tabel_p3_konversi a left outer join siswa b on a.no_daftar=b.no_daftar  where a.tahun=thn; 
END
'''

我希望它将结果显示为所选条件值,就像显示所选范围上的值的数量的其他条件一样。谢谢你以前的帮助。如果我在MySQL 8.x中发布的格式不正确,请更正。您可以使用PERCENT_RANK window函数获取所需内容。例如:

select
  aspek,
  min(x) as minval,
  max(x) as maxval,
  20 + 20 * r as val
from (
  select 'K1' as aspek, k1 as x,
    truncate(5 * percent_rank() over (order by k1), 0) as r from t
  union all
  select 'K2' as aspek, k2,
    truncate(5 * percent_rank() over (order by k2), 0) from t
  union all
  select 'K3' as aspek, k3,
    truncate(5 * percent_rank() over (order by k3), 0) from t
  union all
  select 'K4' as aspek, k4,
    truncate(5 * percent_rank() over (order by k4), 0) from t
) x
group by aspek, r
order by aspek, r desc

以文本形式发布表格和数据,向我们展示数据库模式、示例数据、当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。请尝试在Thanke@JuanCarlosOropeza中创建一个示例,感谢您提醒我该规则,我将尽快编辑此示例。很抱歉我的mystake。没问题,我仍然不确定问题出在哪里,因为你已经转换成这个图片和结果图片。你有一些名字,我们不知道他们来自哪里。