% Trong mệnh đề WHERE này làm gì?


13

Tôi đang đào tạo và một trong các kịch bản có lệnh sau:

SELECT SUM(Col2) FROM clust_table WHERE Col1 % 3 = 1

Tôi muốn biết đoạn trích này dùng để làm gì trong mệnh đề WHERE: Col1 % 3 = 1

Tôi đã làm một số nghiên cứu trên internet và không tìm thấy tài liệu tham khảo nào về lệnh này.

Câu trả lời:


32

Nó đang được sử dụng như một toán tử Modulo; trả lại phần còn lại của một số chia cho số khác.

Trong ví dụ của bạn, mệnh đề WHERE đang giới hạn kết quả chỉ với những người có giá trị Col1 chia cho 3 phần còn lại là 1. (ví dụ: 4,7,10, v.v.)



6

% trong SQL có thể được sử dụng ở hai định dạng khác nhau. Nếu nó được sử dụng trong một chuỗi với LIKEthì đó là một thẻ hoang dã, ví dụ:

WHERE col_name like '%test%'

Điều đó có nghĩa là tìm thấy mọi thứ trong col_nameđó có từ "kiểm tra" trong đó.

Nhưng trong hoạt động cụ thể này, ký hiệu% đang được sử dụng làm toán tử modulo. Modulo (trên một máy tính thường được hiển thị dưới dạng MODnút) trả về phần còn lại. Nó có thể là một công cụ khá hữu ích nếu sử dụng vòng lặp for để hiển thị dữ liệu và bạn muốn đếm các cột - Gần đây tôi đã sử dụng toán tử modulo khi vẽ lên một trang web. Của tôi là trong PHP, nhưng đây là một ví dụ:

$count = 0 ;
$records = array () ;
for ( $a = 0 ; $a < 100 ; $a++ )
    $records[$a] = $a ;
foreach ( $records as $record )
{
    if ( $count % 3 == 0 )
        echo '<p>Three items</p>' ;
    if ( $count % 10 == 0 )
        echo '<p>Ten items</p>' ;
    echo '<p>'.$record.'</p>' ;
    $count++ ;
}

Điều này về cơ bản sẽ tạo ra 1 - 100 và cứ ba mục sẽ xuất ra "Ba mục" và cứ mười mục sẽ xuất ra "Mười mục" bởi vì bất kỳ số nào khác sẽ trả về một giá trị, ví dụ:

5 / 10 = 0.5 (5 % 10 = 5)
2 / 3 = 0.666... (2 % 3 = 2)
50 / 10 = 5.0 (50 % 10 = 0)
9 / 3 = 3.0 (9 % 3 = 0)

2
2% 3 = 2, không phải 6 .. modulo trả về phần còn lại khi số bạn đang chia cho lớn hơn số bạn đang chia. Số thập phân kéo dài của phép chia theo số thập phân không ảnh hưởng đến đầu ra của mod.
Nick Dewitt

select 5 / 10 ;sẽ cung cấp 0SQL, không phải0.5
ypercubeᵀᴹ

2

Các câu trả lời khác là chính xác. Đó là toán tử modulo, trả về phần còn lại của phép chia.

  • 0% 3 = 0
  • 1% 3 = 1
  • 2% 3 = 2
  • 3% 3 = 0
  • 4% 3 = 1
  • 5% 3 = 2
  • ...

Nhưng tôi nghĩ có thể hữu ích khi thêm TẠI SAO nó là một hoạt động có liên quan và tại sao đôi khi nó có thể hữu ích.

Đây X % 2là cái được sử dụng nhiều nhất vì nó trả về nếu số chẵn hoặc lẻ.

Hãy tưởng tượng rằng bạn muốn chọn tất cả các cột có số chẵn, bạn có thể làm:

SELECT * FROM table WHERE column % 2 = 0

Nếu bạn muốn chọn tất cả các cột có số lẻ, bạn có thể làm:

SELECT * FROM table WHERE column % 2 = 1

Các trường hợp sử dụng khác có thể phát sinh, ví dụ, bạn muốn lọc tất cả các cột theo đơn vị của chúng, bạn có thể sử dụng điều này để lấy tất cả các số có số 0 trong đơn vị của chúng:

SELECT * FROM table WHERE column % 10 = 0
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.