Apa yang dilakukan dalam klausa WHERE ini?

13

Saya sedang melakukan pelatihan dan salah satu skrip memiliki perintah berikut:

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

Saya ingin tahu untuk apa potongan ini dalam klausa WHERE: Col1 % 3 = 1

Saya melakukan riset di internet dan tidak menemukan referensi tentang perintah ini.

Rafaells
sumber

Jawaban:

32

Ini digunakan sebagai Operator Modulo; mengembalikan sisa nomor dibagi dengan yang lain.

Dalam contoh Anda, klausa WHERE membatasi hasil hanya pada yang nilai Col1 dibagi 3 meninggalkan sisa 1. (misalnya 4,7,10, dll.)

A. Folken
sumber
25

Ini operator Modulo .

Mengembalikan sisa satu nomor dibagi dengan yang lain.

Erik Darling
sumber
6

% dalam SQL dapat digunakan dalam dua format berbeda. Jika digunakan dalam string dengan LIKEmaka itu kartu liar, misalnya:

WHERE col_name like '%test%'

Itu berarti menemukan segala sesuatu di col_nameyang memiliki kata "test" di dalamnya.

Tetapi dalam operasi spesifik ini simbol% ​​digunakan sebagai operator modulo. Modulo (pada kalkulator yang biasanya ditampilkan sebagai MODtombol) mengembalikan sisanya. Ini bisa menjadi alat yang sangat berguna jika menggunakan for for untuk menampilkan data dan Anda ingin menghitung kolom - Saya baru-baru ini menggunakan operator modulo saat membuat halaman web. Milik saya di PHP, tetapi ini adalah contoh:

$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++ ;
}

Ini pada dasarnya akan menghasilkan 1 - 100 dan setiap tiga item itu akan menghasilkan "Tiga item", dan setiap sepuluh item itu akan menghasilkan "Sepuluh Item" karena angka lain akan menghasilkan nilai misalnya:

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)
TheKLF99
sumber
2
2% 3 = 2, bukan 6 .. modulo mengembalikan sisanya ketika jumlah yang Anda bagi lebih besar dari jumlah yang Anda bagi. Desimal trailing pembagian dengan desimal tidak berpengaruh pada output mod.
Nick Dewitt
dan select 5 / 10 ;akan menyerah 0dalam SQL, tidak0.5
ypercubeᵀᴹ
2

Jawaban lainnya benar. Ini adalah operator modulo, yang mengembalikan sisa divisi.

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

Tapi saya pikir mungkin membantu untuk menambahkan MENGAPA ini adalah operasi yang relevan dan MENGAPA mungkin berguna kadang-kadang.

Ini X % 2adalah yang paling sering digunakan karena mengembalikan jika jumlahnya genap atau ganjil.

Bayangkan bahwa Anda ingin memilih semua kolom dengan angka genap, Anda dapat melakukannya:

SELECT * FROM table WHERE column % 2 = 0

Jika Anda ingin memilih semua kolom dengan angka ganjil, Anda dapat melakukan:

SELECT * FROM table WHERE column % 2 = 1

Kasus penggunaan lain dapat muncul, misalnya, Anda ingin memfilter semua kolom dengan unitnya, Anda bisa menggunakan ini untuk mendapatkan semua angka yang memiliki nol di unitnya:

SELECT * FROM table WHERE column % 10 = 0
Edu
sumber