Tuyên bố từ chối: Tôi là một newb SQL và đây là một lớp, nhưng tôi thực sự có thể sử dụng một hướng đi đúng hướng.Các giới hạn của GROUP BY
Tôi đã có ba bảng:
student(_sid_, sname, sex, age, year, gpa)
section(_dname_, _cno_, _sectno_, pname)
enroll(_sid_, grade, _dname_, _cno_, _sectno_)
(khóa chính ký hiệu bằng dấu gạch dưới)
Tôi đang cố gắng để viết một truy vấn SQL Oracle tương thích trả về một bảng có tên của học sinh (student.sname
) có gpa cao nhất trong mỗi phần (bao gồm section.cno
và section.sectno
) cũng như tất cả các thuộc tính khác từ section
.
tôi đã quản lý để sử dụng một truy vấn tổng hợp và GROUP BY
để có được điểm trung bình tối đa cho mỗi phần:
SELECT MAX(s.gpa), e.cno, e.sectno
FROM enroll e,
student s
WHERE s.sid = e.sid
GROUP BY e.cno, e.sectno
Hãy để một mình các section
thuộc tính khác, tôi thậm chí không thể tìm ra cách để tack trên tên sinh viên (student.sname
). Nếu tôi thêm nó vào mệnh đề SELECT
, nó phải được bao gồm trong GROUP BY
, điều này sẽ làm rối loạn phần còn lại của truy vấn. Nếu tôi sử dụng toàn bộ truy vấn này trong mệnh đề WHERE
hoặc FROM
của truy vấn bên ngoài, tôi chỉ có thể truy cập vào ba trường trong bảng, điều này không được sử dụng nhiều.
Tôi biết bạn không thể cho tôi câu trả lời chính xác, nhưng mọi gợi ý sẽ được đánh giá cao!
@OMG Ngựa vằn: Tôi thích cách bạn định dạng truy vấn. – JoshD
@JoshD: tất cả chúng ta đều làm ;-) – zerkms
Về cơ bản bạn đã nói điều đó. Thêm bảng mục vào FROM. Thêm các ràng buộc vào phần WHERE để tham gia để đăng ký. Thêm các cột bạn muốn hiển thị cho SELECT và lặp lại chúng trong GROUP BY. – kevpie