SQL中同一列中不同值的多个条件

时间:2016-05-12 14:49:11

标签: java mysql sql database algorithm

我有以下SQL数据库表。

qualificationTable

QualId studentRegNo CourseName   Percentage

1       1           A            91 
2       1           B            81
3       1           C            71
4       1           D            61
5       2           A            91
6       2           B            81
7       2           C            71
8       2           D            70

testTable

TestId  studentRegNo testNo  Percentage dateTaken

1       1           1       91         2016-05-02
2       1           2       81         2015-05-02
3       1           3       71         2016-04-02
4       1           1       95         2014-05-02
5       1           2       43         2016-01-02
6       1           3       78         2015-05-02
7       2           1       80         2016-05-02
8       2           2       99         2016-05-02
9       2           3       87         2016-05-02

我分别为课程A,B,C和D指定了最低百分比。我需要搜索学生,达到所有课程的最低标准。

部分-2: 该学生还应该与testTable中的标准(三个测试的单独指定的最小百分比1,2和3)相匹配。

换句话说,如果学生符合所有课程单独指定的最低标准(百分比),则应选择他。现在,对于testTable来说,那个特定的学生(在qualifiedTable中被选中)应该具有为testNo列中的三个测试(1,2和3)单独指定的最小标准(百分比)。

修改

我已经更新了testTable,现在有一个特定学生的多个测试。我需要检查学生是否满足所有3个测试所规定的最低要求百分比,但是,只有最近参加的每个测试(1,2和3)的测试都应该计算。如果学生不符合最近一次考试规定的最低标准,则不应包括在内。

测试用例:

要求的最低资格百分比:

  

课程A:90课程B:80课程C:70课程D:60

所需的最低测试百分比:

  

测试1:90测试2:80测试3:70

预期输出

studentNo

2

到目前为止,我有这个:

SELECT stdqualificationmaster.studentRegNo
FROM 
( SELECT studentRegNo FROM stdqualificationmaster
  WHERE (CourseName = 'High School' AND Percentage >= 90)
  OR (CourseName = 'Intermediate' AND Percentage >= 80)
  OR (CourseName = 'BCA' AND Percentage >= 70)
  OR (CourseName = 'MCA' AND Percentage >= 60)
  GROUP BY studentRegNo
  HAVING COUNT(1) = 4
) stdqualificationmaster JOIN
( SELECT studentRegNo FROM testmaster
  WHERE (testLevel = '1' AND Percentage >= 90)
  OR (testLevel = '2' AND Percentage >= 80)
  OR (testLevel = '3' AND Percentage >= 70)
  GROUP BY studentRegNo
  HAVING COUNT(1) = 3
) testmaster ON stdqualificationmaster.studentRegNo = testmaster.studentRegNo;

MySQLFiddle

CREATE TABLE qualificationmaster
    (`QualId` int, `studentRegNo` int, `CourseName` varchar(1), `Percentage` int)
;

INSERT INTO qualificationmaster
    (`QualId`, `studentRegNo`, `CourseName`, `percentage`)
VALUES
    (1, 1, 'A', 91),
    (2, 1, 'B', 81),
    (3, 1, 'C', 71),
    (4, 1, 'D', 61),
    (5, 2, 'A', 91),
    (6, 2, 'B', 81),
    (7, 2, 'C', 71),
    (8, 2, 'D', 70)
;


CREATE TABLE testmaster
    (`TestId` int, `studentRegNo` int, `testNo` int, `Percentage` int)
;

INSERT INTO testmaster
    (`TestId`, `studentRegNo`, `testNo`, `Percentage`)
VALUES
    (1, 1, 1, 91),
    (2, 1, 2, 81),
    (3, 1, 3, 71),
    (4, 1, 1, 95),
    (5, 1, 2, 43),
    (6, 1, 3, 78),
    (7, 2, 1, 80),
    (8, 2, 2, 99),
    (9, 2, 3, 87)
;

干杯

0 个答案:

没有答案