Я получаю ошибку «подзапрос, возвращающий несколько строк». Я хочу вернуть несколько строк, однако - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу иметь подзапрос, который возвращает несколько строк в MySQL. Я также использовал функцию IN. Однако я получаю ошибку «подзапрос, возвращающий несколько строк». Я приложил изображение используемых таблиц и желаемый результат. Вот мой SQL код:

Select t2.STUID, t3.UnitCmd, //main query

(Select count(*) as 'FullDutyCount' from stormtroopers_officer A1 inner join st_officer_assign A2 ON A1.STID = A2.STID where A2.STUID IN('STU-1','STU-2','STU-3') AND A1.DutyStatus = 'Full Duty' group by A1.Dutystatus,A2.STUID), //subquery1

(Select count(*) as 'WoundedCount' from stormtroopers_officer A1 inner join st_officer_assign A2 ON A1.STID = A2.STID where A2.STUID IN('STU-1','STU-2','STU-3') AND A1.DutyStatus = 'Wounded' group by A1.Dutystatus,A2.STUID),//subquery2

(Select count(*) as 'KilledCount' from stormtroopers_officer A1 inner join st_officer_assign A2 ON A1.STID = A2.STID where A2.STUID IN('STU-1','STU-2','STU-3') AND A1.DutyStatus = 'Killed' group by A1.Dutystatus,A2.STUID) //subquery 3

FROM stormtroopers_officer t1 inner join st_officer_assign t2 ON t1.STID = t2.STID
inner join stormtrooper_unit t3 ON t2.STUID = t3.STUID where t2.STUID IN ('STU-1','STU-2','STU-3') group by t1.Dutystatus,t2.STUID;

enter image description here

enter image description here

1 Ответ

1 голос
/ 24 апреля 2020

Вы, кажется, хотите условную агрегацию:

select
    su.stuid,
    su.unitCmd unitHQ,
    sum(so.dutyStatus = 'Full Duty') fullDutyCount,
    sum(so.dutyStatus = 'Wounded'  ) woundedCount,
    sum(so.dutyStatus = 'Killed'   ) killedCount
from st_officier_assign soa
inner join stormtrooper_unit su on su.stuid = soa.stuid
inner join stormtrooper_officer so on so.stid = so.stid
where su.stuid in ('STU-1','STU-2','STU-3')
group by su.stuid, su.unitCmd
...