동점 순위를 계산하는 데 다음 코드가 있습니다. 이 코드 순위는 Mark_score의 합계로 계산됩니다. 내가 알고 싶은 것은 각 주제에서 mark_scored로 순위를 산정 할 수있는 방법입니다. 한 학생이 단 하나의 과목에서 실패하지만 모든 과목을 통과 한 다른 학생의 점수보다 점수가 더 높아질 수 있습니다. 따라서 그러한 경우, 모든 과목에서 합격 한 사람은 총점 점수가 높은 사람보다 높은 순위에 있어야합니다. 이 코드는 내가 지금까지 시도해 왔으며 내가 원하는 것을 어떻게 얻을 수 있을지 전혀 모른다. 나는 Google에서 검색 중이며 mysql에서 최소한 자습서를 제공하지만 솔루션을 찾을 수없는 모든 사용 가능한 사이트가 될 수 있습니다. 도와주세요. PHP 솔루션이나 다른 제안도 환영합니다. 내 코드를 참조하십시오 :동점 및 조건으로 순위 지정
SELECT regd, Roll_no, Name_of_Student, Section, Test_date,
English,
Mizo,
Mathematics,
SS,
Science,
score, fmscore, perc, Rank
FROM
(
SELECT t.*, IF(@p = score, @n, @n := @n + 1) AS Rank, @p := score
FROM
(
SELECT regd, Roll_no, Name_of_Student, Test_date, Section,
SUM(IF(Subject = 'English' , Mark_score, 0)) English,
SUM(IF(Subject = 'Mizo' , Mark_score, 0)) Mizo,
SUM(IF(Subject = 'Mathematics', Mark_score, 0)) Mathematics,
SUM(IF(Subject = 'SS' , Mark_score, 0)) SS,
SUM(IF(Subject = 'Science' , Mark_score, 0)) Science,
SUM(Full_mark) fmscore,
SUM(Mark_score) score,
SUM(Mark_score)/SUM(Full_mark) * 100 perc
FROM exam, (SELECT @n := 0, @p := 0) n
GROUP BY regd
ORDER BY score DESC
) t
) r
이 내 테이블 :
CREATE TABLE IF NOT EXISTS `exam` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`regd` int(11) NOT NULL,
`Name_of_Student` varchar(100) COLLATE latin1_general_ci NOT NULL,
`Class` varchar(50) COLLATE latin1_general_ci NOT NULL,
`Roll_no` int(11) NOT NULL,
`Section` varchar(50) COLLATE latin1_general_ci NOT NULL,
`Name_of_exam` varchar(100) COLLATE latin1_general_ci NOT NULL,
`Test_date` date NOT NULL,
`Subject` varchar(50) COLLATE latin1_general_ci NOT NULL,
`Full_mark` int(11) NOT NULL,
`Mark_score` int(11) NOT NULL,
`Year` year(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=505 ;
샘플 데이터 : 하나 개의 주제에 순위를 찾는
INSERT INTO `exam` (`id`, `regd`, `Name_of_Student`, `Class`, `Roll_no`, `Section`, `Name_of_exam`, `Test_date`, `Subject`, `Full_mark`, `Mark_score`, `Year`) VALUES
(1, 2147, 'Lalrinawmi', 'IX', 1, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 28, 2013),
(2, 2149, 'R.Lalruatfela', 'IX', 2, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 23, 2013),
(3, 2152, 'Lallawmtlinga', 'IX', 3, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 25, 2013),
(4, 2153, 'Malsawmdawngzela', 'IX', 4, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 23, 2013),
(5, 2154, 'Lincoln Lalduhsaka', 'IX', 5, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 22, 2013),
(6, 2157, 'Vanlalhriatpuia Hrahsel', 'IX', 6, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 21, 2013),
(7, 2158, 'C.Malsawmtluanga', 'IX', 7, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 23, 2013),
(8, 2162, 'C.M.S. Dawngliana', 'IX', 8, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 26, 2013),
(9, 2165, 'B. Malsawmkimi', 'IX', 9, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 21, 2013),
(10, 2164, 'Lalnunmawii', 'IX', 10, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 20, 2013),
(11, 2167, 'Hmangaihenlaii', 'IX', 11, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 29, 2013),
(12, 2170, 'Lalrinsangi', 'IX', 12, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 26, 2013),
(13, 2166, 'John Malsawmtluanga', 'IX', 13, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 27, 2013),
(14, 2171, 'Malsawmtluangi', 'IX', 14, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 26, 2013),
(15, 2173, 'Azid Ahmed Barbhuiya', 'IX', 15, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 23, 2013),
(16, 2174, 'John Lalramdina', 'IX', 16, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 26, 2013),
(17, 2175, 'B. Lalrotlinga', 'IX', 17, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 21, 2013),
(18, 2176, 'Rebec Lalremruati', 'IX', 18, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 23, 2013),
(19, 2177, 'Hmingthanmawii', 'IX', 19, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 21, 2013),
(20, 2178, 'Johny Lalbiakzuala', 'IX', 20, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 23, 2013),
(21, 2179, 'Lalrinfela', 'IX', 21, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 21, 2013),
(22, 2181, 'Lalremruata', 'IX', 22, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 21, 2013),
(23, 2182, 'Isaac Lalmuankima', 'IX', 23, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 20, 2013),
(24, 2185, 'Lalduhsaka', 'IX', 24, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 20, 2013),
(25, 2186, 'Lalrinfeli', 'IX', 25, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 20, 2013),
(26, 2187, 'Lalnunhlui', 'IX', 26, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 20, 2013),
(27, 2188, 'Liantinthanga', 'IX', 27, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 21, 2013),
(28, 2190, 'C.Lalmuanpuii', 'IX', 28, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 21, 2013),
(29, 2193, 'Lalramzailawma', 'IX', 29, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 23, 2013),
(30, 2194, 'Malsawmpuia', 'IX', 30, 'A', 'First Term Unit Test', '2013-07-23', 'English', 30, 26, 2013);
: 당신이 원하는 무엇
SELECT regd, Roll_no, Name_of_Student, Subject,
score, Rank
FROM
(
SELECT t.*, IF(@p = score, @n, @n := @n + 1) AS Rank, @p := score
FROM
(
SELECT regd, Roll_no, Name_of_Student, Subject,
SUM(Mark_score) score
FROM exam, (SELECT @n := 0, @p := 0) n
Where Subject='English'
GROUP BY regd
ORDER BY score DESC
) t
) r
학생이 합격했는지 실패했는지 알 수있는 필드는 무엇입니까? –
@Dan Bracuk, 패스 마크는 mark_scored의 35 %로 주어집니다. –