我遇到了select语句的问题。当我使用distinct时它仍会给我某些行的副本。我尝试使用group by it修复了复制但删除了其中一个值。
图片链接: Group by and Distinct
这是我想要输出的内容: Solution
这是我的代码:
SELECT DISTINCT M.Major,
S.Ethnicity = 'American Indian or Alaska Native' AS AIAN,
S.Ethnicity = 'Asian' AS Asian,
S.Ethnicity = 'Black or African American' AS Black,
S.Ethnicity = 'Hispanic/Latino' AS Hisp,
S.Ethnicity = 'Native Hawaiian or Other Pacific Islander' AS Native,
S.Ethnicity = 'White' AS White,
S.Ethnicity = 'Unknown/Other' As Other
FROM STUDENT AS S, MAJOR AS M
WHERE S.Major_ID = M.MajorID and S.Gender = 'Female'
Group By M.Major;
STUDENT |
CREATE TABLE `STUDENT` (
`StudentID` int(11) NOT NULL AUTO_INCREMENT,
`FirstName` char(35) NOT NULL,
`LastName` char(35) NOT NULL,
`DateOfBirth` date NOT NULL,
`SSN` char(11) NOT NULL,
`GGCEmail` varchar(100) NOT NULL,
`Gender` char(6) NOT NULL,
`Ethnicity` char(100) NOT NULL,
`IsGrad` char(3) NOT NULL,
`Major_ID` int(11) NOT NULL,
`Minor_ID` int(11) DEFAULT NULL,
`Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`StudentID`),
KEY `MAJOR_STUDENT_FK` (`Major_ID`),
KEY `MINOR_STUDENT_FK` (`Minor_ID`),
CONSTRAINT `MAJOR_STUDENT_FK` FOREIGN KEY (`Major_ID`) REFERENCES `MAJOR` (`MajorID`),
CONSTRAINT `MINOR_STUDENT_FK` FOREIGN KEY (`Minor_ID`) REFERENCES `MINOR` (`MinorID`)
MAJOR |
CREATE TABLE `MAJOR` (
`MajorID` int(11) NOT NULL AUTO_INCREMENT,
`Major` char(100) NOT NULL,
`EntryGPA` decimal(3,2) NOT NULL,
PRIMARY KEY (`MajorID`)
答案 0 :(得分:0)
我认为你应该使用一个总和并选择案例
SELECT DISTINCT M.Major,
sum( case S.Ethnicity when 'American Indian or Alaska Native' then 1 else 0 END) AS AIAN,
sum( case S.Ethnicity when 'Asian' then 1 else 0 END ) AS Asian,
sum( case S.Ethnicity when 'Black or African American' then 1 else 0 END ) AS Black,
sum( case S.Ethnicity when 'Hispanic/Latino' then 1 else 0 END) AS Hisp,
sum( case S.Ethnicity when 'Native Hawaiian or Other Pacific Islander' then 1 else 0 END) AS Native,
sum( case S.Ethnicity when 'White' then 1 else 0 END) AS White,
sum( case S.Ethnicity when 'Unknown/Other' then 1 else 0 END) As Other
FROM STUDENT AS S, MAJOR AS M
WHERE S.Major_ID = M.MajorID and S.Gender = 'Female'
Group By M.Major;