2010-06-07 14 views
5

Tôi đang gặp một số sự cố khi tạo truy vấn mang lại cho tôi mức trung bình của tổng. Tôi đọc một vài ví dụ ở đây trong stackoverflow và không thể làm điều đó. Bất cứ ai có thể giúp tôi hiểu làm thế nào để làm điều này xin vui lòng? Đây là dữ liệu tôi có:Mức trung bình của một số trong truy vấn Mysql

Transaction_x0020_Number Product_x0020_Code Sales_x0020_Value Date  Cashier 
000356     350     24.99    2010-06-04 131  
000356     726     32.99    2010-06-04 131  
000357     350     24.99    2010-06-04 131  
000358     350     24.99    2010-06-04 131  
000358     360     24.99    2010-06-04 131  
000770     703     69.99    2010-06-04 130  
000771     726     32.99    2010-06-04 130  
000772     1126    5     2010-06-04 130  
000773     482     32.99    2010-06-04 130  
000774     600     32.99    2010-06-04 130  
000775     350     24.99    2010-06-04 130  

Về cơ bản tôi cần giá trị giao dịch trung bình của nhân viên thu ngân. Tôi không thể chạy một avg cơ bản vì nó sẽ lấy tất cả các hàng nhưng mỗi giao dịch có thể có nhiều hàng. Cuối cùng tôi muốn có:

Cashier| Average| 
131 | 44.31 |(Which comes from the sum divided by 3 transactions not 5 rows) 
130 | 33.15 | 
etc. 

Đây là câu hỏi tôi phải tổng các giao dịch nhưng không biết làm thế nào hoặc nơi để bao gồm các chức năng AVG.

SELECT `products`.`Transaction_x0020_Number`, 
     Sum(`products`.`Sales_x0020_Value`) AS `SUM of Sales_x0020_Value`, 
     `products`.`Cashier` 
    FROM `products` 
GROUP BY `products`.`Transaction_x0020_Number`, `products`.`Date`, `products`.`Cashier` 
    HAVING (`products`.`Date` ={d'2010-06-04'}) 

Mọi trợ giúp đều được đánh giá cao.

Trả lời

14
SELECT Cashier, 
     Sum(Sales_x0020_Value)/COUNT(DISTINCT Transaction_x0020_Number) AS 'avg' 
FROM products 
WHERE Date = {d'2010-06-04'} 
GROUP BY Cashier 
+0

Ah, 8 giây trước đó, đã bị xóa (mặc dù tôi không nhớ cú pháp d {} trên MySQL?). không cần phải biết số tiền của một giao dịch nếu nó thực sự được tính trung bình. – Wrikken

+1

Một lưu ý phụ: giải pháp tốt nhất, nhưng tại sao lại sao chép mệnh đề HAVING, thay vì chỉ một WHERE nên được sử dụng? – Wrikken

+0

+1 tính năng này hoạt động. Giải pháp tốt đẹp nếu HAVING là cố định. –

-3

Đây là cách đơn giản nhất mà tôi biết.

SELECT answers, AVG(score) 
FROM tests