Mysql 读取select时出现问题,条件为,但结果为空
我有一个问题,在执行选择WO的存储过程时,条件是结果为NULL。我有3个存储过程要为结果执行。我用于数据的表格是: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
'''
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。没问题,我仍然不确定问题出在哪里,因为你已经转换成这个图片和结果图片。你有一些名字,我们不知道他们来自哪里。