我创建了一个表格,如下所示:
CREATE TABLE myRecord(stu_name VARCHAR(50),gender VARCHAR(50),level VARCHAR(50));
INSERT INTO myRecord VALUES('John','Male','Pre-Primary');
INSERT INTO myRecord VALUES('Jane','Female','Year 1');
INSERT INTO myRecord VALUES('Sue','Female','Year 2');
预期结果应该如下:
Male | Female | Level
----------------------
1 | 0 | Pre-Primary
但是当我运行下面的 SQL 时:
SELECT SUM(t.Male) AS Male,
SUM(t.Female) AS Female,
t.level
FROM
((SELECT SUM(gender='Male') as Male,
SUM(gender='Female') as Female,
CASE WHEN level='Pre-Primary'
THEN 'Pre-Primary'
END AS level
FROM myRecord
) t)
;
输出如下:
Male | Female | Level
----------------------
1 | 2 | Pre-Primary
它还计算了第一年和第二年。我只希望它计算级别=“学前类”的级别的每个性别。我尝试过使用 GROUP BY level 但它给了我相同的结果。我也尝试过,但它给了我一个错误。
有什么可行的方法吗?我已经为此工作了几天,但无法解决它,这有点令人失望。我希望有人能帮忙解决这个问题。
最佳答案
也许您需要一个 where
子句:
SELECT SUM(gender = 'Male') AS Male, SUM(gender = 'Female') AS Female, level
FROM myRecord
WHERE level = 'Pre-Primary';
我不明白为什么需要子查询。
关于MySQL通过从另一列中选择一个值来计算一列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26829114/