Mysql tính tỷ lệ phần trăm của hai cột
Tôi có 2 bảng t1 nơi giá và loại mặt hàng được lưu trữ với giá trị ENUM và t2 nơi lưu trữ số lượng đã bán. Tôi có truy vấn để tính tổng doanh số bán hàng (giá * số lượng) nhưng tôi cần tính chênh lệch giữa 2 số kết quả Công thức tính hiệu giữa 2 số phải là ((N1 - N2)/((N1 + N2)/2)) * 100 Sử dụng công thức trên, tôi cần tính sự khác biệt về tỷ lệ phần trăm giữa N1 và N2. Cả hai số đều là kết quả của 2 trường hợp SUM riêng biệt dựa trên 2 giá trị ENUM trong col_type (vui lòng xem bên dưới)
Kết quả đầu ra sẽ giống như
Câu hỏi của tôi là làm cách nào để chuyển các giá trị của N1 và N2 (đã được tạo) sang cột thứ 3 và tính toán sự khác biệt giữa N1 và N2 bằng công thức trên? Ghi chú. Xin lưu ý rằng đó là phần trăm chênh lệch giữa 2 số và không phải phần trăm thay đổi khi áp dụng (N2-N1) / N1 * 100 Câu hỏi này xuất hiện thường xuyên khi bạn muốn đóng góp tương đối của một hàng trong bối cảnh tổng của tất cả các hàng. Ví dụ
Xem xét một bảng với số lượt xem trang (tính bằng tỷ) với mỗi trình duyệt Trình duyệtLượt xem trangChrome7. 1685Safari1. 935Firefox1. Trình duyệt 3455UC1. 0965IE1. 341Opera0. 816Android0. 7245Phần còn lại1. 2Điều chúng tôi thực sự muốn thấy là thị phần trình duyệt. Chúng tôi có thể sử dụng Biểu thức bảng chung (CTE) để tính tổng số lần xem trang mà sau đó chúng tôi sử dụng để tính tỷ lệ
Cung cấp tỷ lệ của từng trình duyệt trên tổng số Trình duyệtChia sẻChrome0. 895Safari0. 241875Firefox0. 1681875UC Trình duyệt0. 1370625IE0. 167625Opera0. 102Android0. 0905625Nghỉ0. 15Và hình dung Tỷ lệ phần trăm trên tổng số mỗi nhómCâu hỏi tiếp theo là làm thế nào điều này đang thay đổi theo thời gian? Những gì chúng tôi đang cố gắng làm ở đây là nhóm dữ liệu của chúng tôi thành các tháng, tính tổng cho nhóm đó và cho mỗi hàng trong nhóm đó tính tỷ lệ. Một tổng số tổng thể sẽ không có ý nghĩa. Xem xét bảng số lần truy cập trang như trước, nhưng có thêm trường ngày dtBrowserPageviews2016-01-01Chrome7. 16852016-01-01Safari1. 9352016-01-01. 2016-01-02Chrome7. 24852016-01-02Safari1. 7212016-01-02. 2016-12-31Chrome7. 8642016-12-31Safari2. 0112016-12-31Một lần nữa, chúng tôi sử dụng các chức năng cửa sổ với một phân vùng trên phần tháng của ngày giờ
Hãy giải nén truy vấn một chút. Chức năng cửa sổ của chúng tôi tạo các phân vùng (nhóm) cho mỗi tháng và đối với mỗi phân vùng, chúng tôi tổng hợp các lần xem trang. Tỷ lệ giữa số lần xem trang của hàng hiện tại và tổng số cho nhóm đó chính xác là những gì chúng tôi muốn Dịch chuyển đỏ có ratio_to_reportMay mắn thay trên Redshift, nó hỗ trợ một hàm cửa sổ có tên là 0 tính toán tỷ lệ giá trị của một cột trong một hàng với tổng của biểu thức đã nói trên nhómĐối với điều này, bạn có thể sử dụng CONCAT() và round(). Trước tiên chúng ta hãy tạo một bảng - mysql> create table DemoTable1844 ( Number int, TotalNumber int ); Query OK, 0 rows affected (0.00 sec) Chèn một số bản ghi vào bảng bằng lệnh chèn - mysql> insert into DemoTable1844 values(50,500); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1844 values(80,500); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1844 values(98,500); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1844 values(45,500); Query OK, 1 row affected (0.00 sec) Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select - mysql> select * from DemoTable1844; Điều này sẽ tạo ra đầu ra sau - +--------+-------------+ | Number | TotalNumber | +--------+-------------+ | 50 | 500 | | 80 | 500 | | 98 | 500 | | 45 | 500 | +--------+-------------+ 4 rows in set (0.00 sec) Đây là truy vấn để tính tỷ lệ phần trăm trong một truy vấn và làm tròn kết quả - ________số 8Điều này sẽ tạo ra đầu ra sau - +--------+ | Result | +--------+ | 10.00% | | 16.00% | | 19.60% | | 9.00% | +--------+ 4 rows in set (0.00 sec) |