Trying to take the sum of the alias studentsnotreviewed, what is the best way to approach this I’ve been stuck trying different things. I want to get the total number for the alias of studentsnotreviewed.
select x.* from ( select s.id as School, e.id as examID, e.exam_start as examstart, e.exam_end as examend, (select count(*) from students st where e.id=st.exam_id and (st.review_flag='' or st.review_flag is null)) as studentsnotreviewed, e.exam_end + Interval 2 day as 'DueDate', (select SUM(studentsnotreviewed)) as SUM from exams e #left join exams on st.exam_id = e.id left join schools s on e.school_id=s.id where e.exam_start < now() and e.exam_start>'2021-01-01' and e.practice=0) as x where studentsnotreviewed>0 and (studentsnotreviewed>15 or examend < now()) order by duedate asc, studentsnotreviewed desc
[Sample data]
| School | examID | examstart | examend | studentsnotreviewed | duedate | sum |
|---|---|---|---|---|---|---|
| 343 | 458092 | Mar 16, 2021, 3:52 PM | Aug 28, 2017, 12:59 AM | 2 | Aug 30, 2017, 12:59 AM | 2 |
| 125 | 360216 | Jan 7, 2021, 11:55 AM | Jul 26, 2018, 11:17 PM | 27 | Jul 28, 2018, 11:17 PM | 27 |
[Desired result] The sum of the alias for studentsnotreviewed.
| Total studentsnotreviewed |
|---|
| 29 |
Advertisement
Answer
I believe metabase supports WITH, so you can alias your whole query as a temporary block of data, and then reuse it as if it were a table:
with x as
(
select
s.id as School,
e.id as examID,
e.exam_start as examstart,
e.exam_end as examend,
(select count(*) from students st where e.id=st.exam_id and (st.review_flag='' or st.review_flag is null)) as studentsnotreviewed,
e.exam_end + Interval 2 day as 'DueDate',
from
exams e
left join exams on st.exam_id = e.id
left join schools s on e.school_id=s.id
where e.exam_start < now() and e.exam_start>'2021-01-01' and e.practice=0
)
select
x.*,
(select SUM(studentsnotreviewed) from x) as SUM
from
x
where
studentsnotreviewed>0 and
(studentsnotreviewed>15 or examend < now())
order by
duedate asc, studentsnotreviewed desc
Your query has a slight syntax error it seems – you mention # and don’t mention students st in the outer query.. I’m sure you can fix this up
I assumed you wanted the 29 as a value repeating in the resultset. If you literally just want a single value of 29, I suppose it could be given by:
select count(*) from exams e inner join students st on e.id=st.exam_id where (st.review_flag='' or st.review_flag is null) and e.exam_start < now() and e.exam_start>'2021-01-01' and e.practice=0