Kiểu dữ liệu tỷ lệ phần trăm trong MySQL

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ụ

  • thị phần trình duyệt thay đổi như thế nào theo thời gian
  • đóng góp của mỗi nhân viên bán hàng vào doanh thu của công ty bạn là gì

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ệ

with total as
    ( select sum(pageviews) as total
    from pageviews )
select browser,
    pageviews / total.total as share
from pageviews,
    total

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. 15

Và hình dung

Kiểu dữ liệu tỷ lệ phần trăm trong MySQL

Tỷ lệ phần trăm trên tổng số mỗi nhóm

Câ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-31

Mộ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ờ

select date_trunc('month', dt),
    browser,
    pageviews / sum(pageviews) over(partition by date_trunc('month', dt))
from pageviews 

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_report

May mắn thay trên Redshift, nó hỗ trợ một hàm cửa sổ có tên là ratio_to_report 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

Các kiểu dữ liệu SQL là gì, tại sao chúng ta cần chúng và cách sử dụng chúng?

Ngươi mâu

Trước khi làm bất cứ điều gì khác, chúng ta sẽ xem nhanh mô hình mà chúng ta đang sử dụng trong loạt bài này

Kiểu dữ liệu tỷ lệ phần trăm trong MySQL
Kiểu dữ liệu tỷ lệ phần trăm trong MySQL

Bạn có thể nhận thấy rằng mỗi bảng có các cột được xác định theo tên của chúng, nhưng cũng có loại của chúng. Mặc dù cái tên khá rõ ràng và chúng tôi là người định nghĩa nó, nhưng có một chút khác biệt khi nói đến các loại. Chúng tôi có thể chọn loại cột từ danh sách các loại được xác định trước hoặc loại tùy chỉnh của chúng tôi (xây dựng lại từ các loại được xác định trước)

Các kiểu dữ liệu SQL – Giới thiệu nhanh

Nói về kiểu dữ liệu không phải là điều hot nhất trong lập trình. Chúng chỉ là một trong những thứ có ở đây và chúng tôi hy vọng nó sẽ hoạt động. Tuy nhiên, cần phải hiểu những gì chúng ta có sẵn

Khi chúng tôi đang lưu trữ dữ liệu, chúng tôi cần mô phỏng “số đo & định dạng” được sử dụng trong thế giới thực. e. g. chúng tôi muốn lưu trữ chiều cao dưới dạng số thập phân, ngày sinh dưới dạng ngày, 'câu này' dưới dạng văn bản, v.v. Bạn luôn có thể chọn cách cực đoan và lưu trữ mọi thứ dưới dạng văn bản hoặc ảnh

Vì cơ sở dữ liệu dùng để lưu trữ dữ liệu và làm việc với chúng một cách hiệu quả nên chúng tôi sẽ không làm điều đó. Chúng tôi sẽ có một số loại dữ liệu SQL khác nhau theo ý của chúng tôi. Chúng tôi sẽ không chỉ có các loại để lưu trữ văn bản hoặc số, mà chúng tôi còn đi sâu hơn, với các loại mô tả chặt chẽ bản chất của văn bản đó (độ dài của nó) hoặc số (là số nguyên hay số thập phân)

Ý tưởng chính đằng sau các kiểu dữ liệu là mô phỏng các kiểu phổ biến nhất từ ​​thế giới thực. Bằng cách đó, DBMS (hệ thống quản lý cơ sở dữ liệu), sẽ có thể lưu trữ chúng một cách hiệu quả (sử dụng ít không gian hơn, tổ chức tốt hơn) và điều đó cũng sẽ dẫn đến hiệu suất được cải thiện

Các loại này khác nhau giữa các DBMS khác nhau (SQL Server, MySQL, Oracle), nhưng hầu hết chúng đều rất giống nhau. Chúng tôi sẽ tập trung vào các loại dữ liệu SQL Server/Transact-SQL quan trọng nhất

Kiểu dữ liệu văn bản

Như bạn có thể thấy trong mô hình của chúng tôi, có 3 loại dữ liệu trong thế giới thực phổ biến nhất mà chúng tôi cần lưu trữ. văn bản, số và ngày tháng. Do đó, hầu hết DBMS (và các ngôn ngữ lập trình) sẽ hỗ trợ 3 nhóm chính này. Trong mỗi nhóm này, bạn sẽ tìm thấy các kiểu dữ liệu SQL ít nhiều được tiêu chuẩn hóa

Vì vậy, trước tiên hãy xem nhanh các kiểu dữ liệu văn bản. Trong bảng bên dưới, bạn sẽ tìm thấy các kiểu dữ liệu văn bản/chuỗi Transact-SQL với các mô tả ngắn

Kiểu dữ liệu tỷ lệ phần trăm trong MySQL
Kiểu dữ liệu tỷ lệ phần trăm trong MySQL

quan trọng nhất là

  • char(n) – trong đó n được thay thế bằng số ký tự tối đa mà chúng tôi mong đợi trong bất kỳ chuỗi nào. Nếu vượt quá con số đó, chúng tôi sẽ không thể lưu trữ toàn bộ chuỗi. e. g. char(8) có nghĩa là chúng tôi sẽ lưu trữ 8 ký tự. Nếu chuỗi có ít hơn số đó, các ký tự còn lại sẽ được điền vào khoảng trống. Do đó, char(n), luôn có cùng độ dài, sử dụng cấp phát bộ nhớ tĩnh và hoạt động nhanh hơn 50% so với varchar(n) (trong một kịch bản lý tưởng). Thật khôn ngoan khi sử dụng char(n) khi bạn hoàn toàn chắc chắn về độ dài của dữ liệu bạn sẽ lưu trữ, e. g. mã bưu chính, số tài khoản, số điện thoại, mã ngân hàng, v.v.
  • varchar(n) – phục vụ cùng mục đích như char(n), nhưng điểm khác biệt ở đây là chuỗi kết thúc sau ký tự cuối cùng – chúng ta không thêm khoảng trống để sử dụng toàn bộ chuỗi. e. g. nếu bạn sử dụng varchar(255) và điền vào 15 ký tự thì chỉ có 15 ký tự được lưu trữ. Vấn đề ở đây là chúng tôi không biết độ dài chính xác của mỗi chuỗi, vì vậy mọi thứ hoạt động chậm hơn (vẫn không có gì quan trọng). Vì vậy, chúng tôi đã đánh đổi hiệu suất tốt hơn để tiết kiệm dung lượng ổ đĩa
  • văn bản - tốt, nếu bạn muốn lưu trữ một văn bản lớn, bạn nên sử dụng văn bản này 🙂

Kiểu dữ liệu số

Nhóm lớn tiếp theo của các kiểu dữ liệu SQL chắc chắn là nhóm chứa các kiểu dữ liệu số. Một lần nữa, chúng tôi có tổng quan được đưa ra trong bảng dưới đây

Kiểu dữ liệu tỷ lệ phần trăm trong MySQL
Kiểu dữ liệu tỷ lệ phần trăm trong MySQL

Tuy nhiên, tôi muốn chỉ ra một số loại quan trọng nhất từ ​​​​nhóm này

  • int – Số nguyên là số đầu tiên chúng ta học. Chúng tôi đếm cừu để chìm vào giấc ngủ – 1 con cừu, 2 con cừu… Tôi muốn nói rằng mọi thứ đều bắt đầu từ chúng. Trong hầu hết các trường hợp, bạn sẽ sử dụng int – đối với khóa chính và khóa ngoại, những khóa này sẽ không được ký. Ở những nơi khác, bạn sẽ sử dụng int khi cần lưu trữ số nguyên. Trong trường hợp, bạn muốn tiết kiệm một số dung lượng đĩa, bạn có thể sử dụng tiny hoặc small int nếu bạn chắc chắn điều này sẽ làm được. bigint thực sự có thể đáp ứng mọi nhu cầu của bạn về số nguyên
  • thập phân (p, s) / float (n) / thực – Được sử dụng để lưu trữ số thập phân. Chúng tôi có thể mong đợi rằng hầu hết các giá trị số mà chúng tôi muốn lưu trữ thực sự là các giá trị thập phân - tỷ lệ phần trăm, tọa độ đồ họa, kết quả thể thao, v.v.
  • bit – Chỉ sử dụng 1 bit để lưu trữ giá trị 0 hoặc 1 (NULL nếu không được xác định). Nó phục vụ như một lá cờ cho chúng tôi biết nếu một cái gì đó đứng vững hay không. Một trong những cách sử dụng phổ biến nhất của loại này là lưu trữ thông tin nếu dữ liệu trong bản ghi liên quan vẫn hợp lệ/hoạt động/không bị xóa

Ngày giờ

Nhóm kiểu dữ liệu SQL cuối cùng mà chúng ta sẽ phân tích là kiểu ngày và giờ. Tổng quan được đưa ra trong bảng dưới đây

Kiểu dữ liệu tỷ lệ phần trăm trong MySQL
Kiểu dữ liệu tỷ lệ phần trăm trong MySQL

Tôi muốn nhấn mạnh những điều sau đây

  • ngày – Trong hầu hết các trường hợp, bạn sẽ chỉ cần lưu trữ ngày, e. g. ngày sinh, ngày đăng ký, vv
  • datetime – Lưu trữ ngày và giờ trong một thuộc tính
  • dấu thời gian – Không phải là tiêu chuẩn SQL Server, nhưng có thể bạn sẽ gặp nó trong các DBMS khác. Nó phục vụ cùng một mục đích như datetime, nhưng có liên quan đến thời gian UTC

Danh sách các kiểu dữ liệu MS SQL thú vị còn lại được đưa ra trong bảng bên dưới

Kiểu dữ liệu tỷ lệ phần trăm trong MySQL
Kiểu dữ liệu tỷ lệ phần trăm trong MySQL

Vì vậy, bạn cần sử dụng kiểu dữ liệu SQL nào?

Câu trả lời cho câu hỏi này vừa đơn giản vừa phức tạp. Trong hầu hết các trường hợp, bạn sẽ biết chính xác mình cần gì – số nguyên là số nguyên. Tuy nhiên, có rất nhiều thứ để chơi – kết hợp char và varchar, tránh sử dụng văn bản bất cứ khi nào có thể. Đây là một trò chơi mà bạn phải đoán bất cứ điều gì người dùng cuối muốn chèn và hỗ trợ điều này. Tất nhiên, với hiệu suất tốt nhất có thể và dung lượng ổ đĩa tối thiểu được phân bổ

Kiểu dữ liệu của tỷ lệ phần trăm là gì?

Không giống như số nguyên, số thập phân cố định và số thập phân, loại này không có loại tương ứng trong mô hình dữ liệu. Khi được tải vào mô hình dữ liệu, loại dữ liệu tỷ lệ phần trăm được biểu thị dưới dạng loại số thập phân .

Có kiểu dữ liệu phần trăm trong SQL không?

Không có toán tử tích hợp nào tính toán tỷ lệ phần trăm trong SQL Server . Bạn phải dựa vào các phép toán số học cơ bản. e. (number1/number2 x 100) để tìm tỷ lệ phần trăm trong SQL Server.

3 loại kiểu dữ liệu MySQL là gì?

Trong MySQL có 3 kiểu dữ liệu chính. chuỗi, số, ngày giờ .