Làm cách nào để tìm giá trị trung bình của một cột trong MySQL?


10

Tôi chỉ có thể tưởng tượng làm điều này với hai truy vấn cơ sở dữ liệu. Cái đầu tiên tìm thấy số lượng hàng trong cơ sở dữ liệu và cái thứ hai chọn với một ORDER BYcột trên cột mà tôi quan tâm và trong LIMIT X, 1đó X là một nửa số hàng.

Có một cách đơn giản để làm điều này chỉ với một truy vấn?

Ngay bây giờ tôi đang sử dụng trung bình trong tính toán của mình, nhưng tôi nghĩ giá trị trung bình sẽ tốt hơn; không có giới hạn trên của các giá trị và chúng được giới hạn từ bên dưới 0.


EDIT: vâng, tôi có ý nói 'trung bình' nhưng đã có một số lỗi về não & tìm kiếm 'nghĩa là'. Bây giờ tôi đã tìm thấy câu trả lời tại stackoverflow


Sau khi đọc metamột chút, có vẻ như có một phân chia về thời tiết câu hỏi này nên ở đây hoặc tại SO. Tôi nhận ra đây có thể không phải là truy vấn cấp ninja , nhưng nó khiến tôi bối rối và không có DBA tại công ty tôi làm việc (tổng cộng 6 người).
JIS tone

Câu trả lời:


6

Có khá nhiều thảo luận ở đây về việc tính toán các giá trị trung bình từ bảng MySQL. Chỉ cần tìm kiếm trang 'trung vị'.

Như một bên, nó gây ấn tượng với tôi rằng không có chức năng tích hợp để làm điều này. Median thường được mô tả nhiều hơn về xu hướng trung tâm hơn là trung bình. Access / VBA có cùng một lỗ trong danh sách chức năng của nó.


Tôi đồng ý. Khi làm việc với một truy vấn lớn, các dòng bổ sung chỉ làm cho toàn bộ điều trở nên cồng kềnh & khó gỡ lỗi / bảo trì hơn.
JIS tone

2

Tôi chưa thấy giải pháp ở bất cứ đâu quản lý để lấy trung vị trong một truy vấn duy nhất. Tôi không ngại các bảng tạm thời, nhưng nếu chúng không cần thiết, thật tuyệt! Đây là những gì tôi nghĩ ra:

SELECT AVG(profit) median, nofitems FROM(
  SELECT x.profit, SUM(SIGN(1.0-SIGN(y.profit-x.profit))) diff, count(*) nofitems, floor(count(*)+1/2)
  FROM brand_prof x, brand_prof y
  GROUP BY x.profit
  HAVING SUM(SIGN(1.0-SIGN(y.profit-x.profit))) = floor((COUNT(*)+1)/2)
      OR SUM(SIGN(1.0-SIGN(y.profit-x.profit))) = ceiling((COUNT(*)+1)/2)
) x;

Tôi đã thử nghiệm điều này cho một bộ chẵn, và đã có câu trả lời đúng. brand_prof chỉ là hai cột: brand_name và lợi nhuận, một giá trị thập phân. Nếu đây là giá trị số nguyên, bạn có thể phải bỏ "trần ((CAST COUNT (*) NHƯ QUYẾT ĐỊNH) ..." Nhiều hơn tôi đã thử nghiệm. Ý tưởng tuyệt vời để sử dụng sản phẩm cartesian và liên quan đến tổng số dấu hiệu là không phải của tôi. Tôi đã quên tác giả, thật không may.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.