Tính tổng các phần của cột dựa trên một cột khác bằng Máy tính Trường QGIS?


16

Tôi muốn tính tổng các giá trị trong một cột, dựa trên các giá trị trong cột khác. Để minh họa cho câu hỏi của tôi, tôi đã tải lên hình ảnh dưới đây. Cột thứ hai bao gồm mã zip, tổng doanh số thứ ba. Tôi muốn biết tổng doanh số trên mỗi mã zip là bao nhiêu? Vì vậy, trong trường hợp này:

Tổng của cột ba cho giá trị của cột hai là 1023gì? Đầu ra thì nên 4 (0+1+1+2+0). Tổng 1024sau đó sẽ là 11,5 theo cùng một logic.

Vì đây là một tập dữ liệu khá lớn, tôi muốn có máy tính trường QGIS (hoặc bất kỳ công cụ nào khác) tính toán một trường mới trong đó nêu tổng doanh số trong mã zip. Cho đến nay tôi dường như không thể làm cho nó hoạt động và hy vọng ai đó ở đây có thể giúp tôi.

Như bạn có thể thấy tôi có một số giá trị bị thiếu, đây có phải là một vấn đề trong tính toán không? Có lẽ tốt để đề cập đến là nó là một bảng.

Thí dụ


nên là 3 (0 + 1 + 1 + 2 + 0) ?? có thật không?
dùng7172

Câu trả lời:


24

Cập nhật: QGIS 2.18 (07/07/2017):

Trong Máy tính trường , bạn có thể sử dụng hàm Tổng hợpsum cho phép bạn tính tổng các giá trị của một cột dựa trên một biểu thức. Bạn cũng có thể, tùy chọn, nhóm và các tính năng lọc để tính tổng. Vì vậy, trong máy tính trường của bạn, bạn chỉ cần sử dụng:

sum( "Sum", "Sales")

Mà chính xác giống như phương pháp sử dụng plugin GroupStats .



Bài gốc: 02/03/2016

Sử dụng plugin GroupStats mà bạn có thể cần tải xuống từ Plugin> Quản lý và cài đặt plugin .

Đây là một lớp ví dụ sử dụng một số thuộc tính bạn đã hiển thị:

Lớp

Vậy hãy:

  1. Chạy plugin GroupStats , chọn các trường có liên quan để tính tổng ( Salescho các hàng; Sumcho các giá trị) và sau đó nhấp vào Tính toán . Bạn sẽ thấy kết quả hiển thị tổng của mỗi lần bán:

    Plugin GroupStats

  2. Lưu kết quả dưới dạng tệp .csv từ thanh công cụ GroupStats:

    Xuất sang csv

  3. Nhập tệp .csv trở lại vào QGIS bằng cách kéo tệp vào giao diện hoặc từ thanh công cụ:

    Lớp> Thêm lớp> Thêm lớp văn bản được phân tách ( lưu ý rằng các giá trị được phân tách bằng dấu chấm phẩy )

  4. Thực hiện một Joins với tệp shapefile và .csv, khớp với các Salestrường:

    Tham gia

  5. Bây giờ shapefile sẽ chứa các giá trị tổng từ tệp .csv:

    Các kết quả

Nếu bạn muốn, bạn có thể tiến hành sử dụng Save As...tùy chọn trên shapefile và lưu nó dưới dạng mới để giữ các trường đã tham gia.


Sẽ rất hữu ích nếu thành phần máy tính trường của câu trả lời này bao gồm các dòng SQL nhóm và / hoặc bộ lọc. @ Joseph
eyerah

@eyerah - Biểu thức sum( "Sum", "Sales")sử dụng "Sales"làm bộ lọc nhóm, nếu đó là ý bạn?
Joseph

1
Oh. Tôi thấy điều đó bây giờ. Đó là những gì tôi muốn nói. Cảm ơn.
Eyerah

11

Nếu bạn cập nhật lên phiên bản mới nhất của QGIS 2.14, bạn có thể sử dụng các lớp ảo tạo một tuyên bố sql như:

SELECT "MYTABLE"."MYID", Sum("MYTABLE"."SALES")  AS zip_sale /*:int*/
FROM "MYTABLE"
GROUP BY "MYTABLE"."ZIPCODE"

Giao diện người dùng trông như:

nhập mô tả hình ảnh ở đây

Bạn cũng có thể sử dụng trình quản lý DB, nơi bạn có trình tạo truy vấn phía sau nút sql:

nhập mô tả hình ảnh ở đây

Cột MYID có thể được sử dụng để tham gia bán hàng tổng hợp trở lại bảng chính. Các tab tham gia là thuộc tính tabel.

Hãy nhìn vào thay đổi hình ảnh của QGIS dướiFeature: Virtual layers


6

Một cách để làm điều này là như sau:

  • Trong bảng thuộc tính, chọn chọn theo tính năng. Nhập "tên cột" = 1023. Tất cả các trường có giá trị 1023 được chọn.
  • Chuyển đến công cụ vector -> Công cụ phân tích -> số liệu thống kê cơ bản. Chọn lớp của bạn và cột với doanh số. Đảm bảo chọn hộp kiểm "chỉ các giá trị được chọn". Tổng sẽ được hiển thị trong cửa sổ kết quả. Bạn phải viết nó ra;)
  • lặp lại các bước cho mỗi mã zip

1
PS thiếu giá trị là không có vấn đề.
Miron

Đây là một cách tiếp cận đơn giản và làm việc tốt. Tuy nhiên, có thể sẽ rất tốn thời gian khi xử lý một tập dữ liệu lớn như Ammar đã đề cập ...
dru87
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.