1

学生が提出したさまざまなプロジェクトでいっぱいの 1 つのテーブルがあります。各プロジェクトは、3 人の異なる審査員によって審査されます。そのため、projectid とudgerid を含むスコアの別のテーブルがあります。まだ 3 回審査されていないプロジェクトを選択できるクエリを作成しようとしています。

ここにいくつかのサンプルテーブルがあります...

プロジェクト

projectid | projectname
-----------------------
9         | Kintetics
11        | Volcano
15        | Robots
22        | Oceanlife

スコア

scoreid (AI) | projectid | judgeid | score
------------------------------------------
1            | 9         | 15      | 5
2            | 11        | 15      | 18
3            | 9         | 23      | 12
4            | 11        | 23      | 11
5            | 9         | 45      | 19
6            | 22        | 15      | 3

プロジェクト 11、15、および 22 にはまだ 3 人の審査員が割り当てられていないため、このクエリはプロジェクト 11、15、および 22 を返すと予想します。

4

5 に答える 5

4
SELECT  a.ProjectID, a.ProjectName
FROM    Projects a
        LEFT JOIN Scores b
            ON a.ProjectID = b.ProjectID
GROUP   BY a.ProjectID, a.ProjectName
HAVING  COUNT(a.ProjectID) < 3

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

出力

╔═══════════╦═════════════╗
║ PROJECTID ║ PROJECTNAME ║
╠═══════════╬═════════════╣
║        11 ║ Volcano     ║
║        15 ║ Robots      ║
║        22 ║ Oceanlife   ║
╚═══════════╩═════════════╝
于 2013-03-22T14:19:53.953 に答える
1
SELECT COUNT(scores.id) AS score_count, projects.* 
FROM scores, projects
WHERE scores.projectid = projects.id
GROUP BY projects.id
HAVING score_count > 2
于 2013-03-22T14:26:38.403 に答える
1

別の方法:

SELECT  a.ProjectID, a.ProjectName
FROM    Projects a
LEFT JOIN (select ProjectID, count(*) counted from Scores) b
       ON a.ProjectID = b.ProjectID
WHERE COALESCE(b.counted,0) < 3
于 2013-03-22T14:25:13.653 に答える
0

これを試して:

SELECT * FROM Projects p WHERE (SELECT COUNT(*) FROM Scores s WHERE s.projectid = p.projectid) < 3
于 2013-03-22T14:22:21.373 に答える
0

これを試して

select * from scores where id not in (select id from scores where project id in (select projectid from scores group by projectid having count(prjectid)=3))
于 2013-03-22T14:20:48.730 に答える