SQL比较必须确定的2个值

时间:2014-05-15 14:08:21

标签: mysql sql

我需要从我的桌子tblResults中找到最多传球的球场。

tblResults:
StuID       Course         Symbol
1001        CSC101         P
1001        RNG101         F
1002        CSC101         P
1002        RNF101         F
1003        HAP101         P
1004        HAP101         P

即应该给CSC101(和所有其他课程(HAP101)相同的通行证)

我试过了:

CREATE VIEW Part1 AS
SELECT NumbF
FROM
  (SELECT COUNT(Course) AS NumbP,
          Course
   FROM tblResults
   WHERE Symbol = 'P')
GROUP BY Course);


CREATE VIEW Part2 AS
SELECT MAX(NumbP) AS Maxnum
FROM Part1,
     tblResults
WHERE Symbol = 'P'
GROUP BY Course;


SELECT Part1.Course
FROM Part1,
     Part2
WHERE Part1.NumbP = Part2.MaxNum

但我似乎做错了什么。请帮忙

4 个答案:

答案 0 :(得分:1)

    SELECT Course, count(StuID) count
    FROM tblResults
    GROUP BY Course
    HAVING count = (SELECT max(c)
                    FROM (SELECT count(StuID) c, Course
                          FROM tblResults
                          GROUP BY Course
                          WHERE Symbol = 'p'
                         ) counts
                   );

答案 1 :(得分:1)

这样的事情应该有效:

create view yourview as
select course, count(*) passcnt
from tblResults
where symbol = 'P'
group by course

select *
from yourview
where passcnt = (select max(passcnt) from yourview)

注意,你不需要视图,我只是为了简单起见而留下了它。

答案 2 :(得分:0)

你可以尝试下面的SELECT,但我还没有测试过它:

SELECT selA.Course, selA.NumPass FROM (
    SELECT Course, COUNT(Course) AS NumPass FROM
        tblResults GROUP BY Course HAVING Symbol = 'P') AS selA
INNER JOIN (
    SELECT MAX(NumPassCount) AS NumPassMax FROM (
        SELECT COUNT(Course) AS NumPassCount FROM
            tblResults GROUP BY Course HAVING Symbol = 'P') AS selB)
        AS selC ON selA.NumPass = selC.NumPassMax

答案 3 :(得分:0)

使用几个子查询

SELECT Sub3.Course
FROM
(
    SELECT MAX(Course) AS MaxCourseCnt
    FROM
    (
        SELECT Course, COUNT(*) AS CourseCnt
        FROM tblResults
        WHERE Symbol = 'P'
        GROUP BY Course
    ) Sub1
) Sub2
INNER JOIN 
(
    SELECT Course, COUNT(*) AS CourseCnt
    FROM tblResults
    WHERE Symbol = 'P'
    GROUP BY Course
) Sub3
ON Sub2.MaxCourseCnt = Sub3.CourseCnt