Vớihiệu quả Bao gồm cột không trong Nhóm By của SQL Query
Bảng A
Id INTEGER
Name VARCHAR(50)
Bảng B
Id INTEGER
FkId INTEGER ; Foreign key to Table A
tôi muốn đếm occurrances của mỗi giá trị FkId
:
SELECT FkId, COUNT(FkId)
FROM B
GROUP BY FkId
Bây giờ tôi chỉ muốn cũng xuất ra Tên từ Table A
.
này sẽ không làm việc:
SELECT FkId, COUNT(FkId), a.Name
FROM B b
INNER JOIN A a ON a.Id=b.FkId
GROUP BY FkId
vì a.Name
không được chứa trong mệnh đề GROUP BY
(sản xuất is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause
lỗi).
Vấn đề là để di chuyển từ đầu ra như thế này
FkId Count
1 42
2 25
để đầu ra như thế này
FkId Count Name
1 42 Ronald
2 22 John
Có khá một vài trận đấu trên SO cho rằng thông báo lỗi, nhưng một số ví dụ https://stackoverflow.com/a/6456944/141172 có các nhận xét như "sẽ tạo 3 lần quét trên bàn, thay vì 1, do đó sẽ không mở rộng".
Làm thế nào tôi có thể có hiệu quảbao gồm một trường từ gia nhập Table B
(trong đó có một 1: mối quan hệ 1-FkId
) trong kết quả truy vấn?
Bạn có thể hiển thị một số dữ liệu mẫu và kết quả mong muốn không? Tôi đang có một thời gian khó hiểu nếu có thể có nhiều hơn một tên duy nhất cho mỗi FkId. –
Sẽ chỉ có một tên duy nhất trên mỗi FkId. Vấn đề là chỉ hiển thị tên cùng với FkId để người dùng xem kết quả không thấy "Người 1 xuất hiện 42 lần" mà đúng hơn là "Người 1, có tên là Ronald, đã xuất hiện 42 lần". –
Vậy tại sao không chỉ thêm Tên vào nhóm theo? –