正确答案是:A: `select StudentID, avg(score) from scores group by StudentID having count(studentID) >= 2`
分析:
1. **选项A**:
- 这条SQL语句使用了`GROUP BY`和`HAVING`子句。
- `GROUP BY StudentID`将数据按学生编号分组。
- `HAVING count(studentID) >= 2`用于过滤分组后的结果,确保只保留参加过至少两门课程考试的学生。
- `avg(score)`计算每个学生的平均成绩。
- 这正是题目要求的查询,语法和逻辑都是正确的。
2. **选项B**:
- 使用了`GROUP BY`和`WHERE`子句。
- `WHERE`子句不能用于聚合函数(如`count`),因为`WHERE`是在分组之前进行过滤的。
- 语法错误,不能实现题目要求。
3. **选项C**:
- 使用了`WHERE`子句和`GROUP BY`,但`WHERE`子句中使用了聚合函数`count(studentID)`。
- `WHERE`在分组之前执行,无法使用聚合函数。
- 语法错误,不能实现题目要求。
4. **选项D**:
- 语句顺序错误,`HAVING`子句应该在`GROUP BY`之后。
- 语法错误。
因此,选项A是唯一正确的选择,符合题目要求的查询条件和SQL语法。