Truy vấn của bạn có một nhóm theo mệnh đề. Nếu bạn sử dụng mệnh đề group by trong truy vấn, thì mỗi cột trong câu lệnh select phải thực hiện một trong hai điều - hoặc nó phải là một phần của nhóm theo danh sách, hoặc nó phải là một tổng hợp của một số loại (Sum , Đếm, Trung bình, Tối đa, v.v.). Nếu bạn không làm điều này, SQL không biết phải làm gì với cột. Trong trường hợp của bạn, Accounts.regno và Accounts.model được liệt kê trong lựa chọn, nhưng chúng không nằm trong nhóm theo điều khoản và chúng không phải là tổng hợp - do đó lỗi của bạn.
Giả sử hiện tại bạn có hai bản ghi tài khoản có cùng tên tài khoản và slacc, nhưng Regno (hoặc kiểu máy) khác nhau. Nhóm theo mệnh đề nói rằng chúng phải được nối vào một bản ghi để hiển thị, nhưng bạn chưa nói với SQL cách thực hiện điều đó. Không quan trọng nếu dữ liệu không như vậy, SQL sẽ tìm kiếm các lỗi có thể xảy ra trước.
Trong trường hợp này, bạn có thể chỉ muốn tất cả các chi tiết được nhóm lại. Cách đơn giản nhất là chỉ cần đảm bảo bạn thêm tất cả các cột cần thiết vào nhóm, như sau
select Accounts.name, Accounts.regno, Accounts.model, Accounts.slacc, count(servicing.dt) as total
from Accounts
left outer join servicing on Accounts.slacc = servicing.slacc
group by Accounts.slacc, Accounts.name, Accounts.regno, Accounts.model
Điều này sẽ khắc phục được lỗi, nhưng bạn không cần phải nhóm thêm và sẽ rất cồng kềnh nếu bạn có nhiều cột hơn bạn muốn từ tài khoản, vì bạn phải thêm tất cả chúng. Một cách khác để xử lý nó là sử dụng số lượng cột tối thiểu cho truy vấn nhóm, sau đó nối kết quả của nó với truy vấn chính của bạn để lấy các cột khác. Nó có thể trông giống như thế này
select Accounts.name, Accounts.regno, Accounts.model, Accounts.slacc, Totals.Total
from Accounts
left outer join
( Select slacc, count(dt) as total
from servicing
group by slacc
) Totals on Totals.slacc = Accounts.slacc