I have a query which is
Select FinalGradeStudent from grade
and it brings me the following column
FinalGradeStudent |
---|
5 |
2 |
5 |
2 |
2 |
0 |
2 |
4 |
n grades... and I want something similar to this, to see the number of students who passed and failed the subject
performance | Estudents |
---|---|
Passed | 3 |
Failed | 5 |
the query I have done is the following
SELECT CASE WHEN FinalGradeStudent >= 3 THEN 'Passed' ELSE 'Failed' END Performance, COUNT(*) Estudents
from Grade GROUP BY FinalGradeStudent
but my result is the following
Performance | Estudents |
---|---|
Passed | 2 |
Failed | 4 |
Passed | 1 |
Failed | 1 |
CodePudding user response:
Your query is fine, but the CASE
expression needs to appear in the GROUP BY
clause:
SELECT
CASE WHEN FinalGradeStudent >= 3 THEN 'Passed' ELSE 'Failed' END Performance,
COUNT(*) Estudents
FROM Grade
GROUP BY
CASE WHEN FinalGradeStudent >= 3 THEN 'Passed' ELSE 'Failed' END;
CodePudding user response:
You can simply first create a temporary table with case
and then do a group by query on that.
CREATE TABLE st (
marks int
);
insert into st values(5);
insert into st values(2);
insert into st values(5);
insert into st values(2);
insert into st values(2);
insert into st values(0);
insert into st values(2);
insert into st values(4);
insert into st values(3);
-- QUERY
select sta.status as performance, count(*) as Estudents from (
select case
when marks>3 then 'PASSED'
else 'FAILED'
end as status
from st) sta
group by sta.status;