このWHERE句の%は何をしますか?


13

私はトレーニングを行っていますが、スクリプトの1つに次のコマンドがあります。

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

WHERE句でこのスニペットの目的を知りたい: Col1 % 3 = 1

私はインターネットでいくつかの調査を行ったが、このコマンドに関する参照は見つかりませんでした。

回答:


32

モジュロ演算子として使用されています。数値を別の数値で割った余りを返します。

あなたの例では、WHERE句は、Col1値を3で割ったものが1の余りを残すものにのみ結果を制限しています(4,7,10など)。



6

SQLの%は、2つの異なる形式で使用できます。それが文字列で使用されている場合LIKE、ワイルドカードです、たとえば:

WHERE col_name like '%test%'

col_nameこれは、「テスト」という単語が含まれているすべてのものを見つけることを意味します。

しかし、この特定の操作では、%記号がモジュロ演算子として使用されています。モジュロ(通常はMODボタンとして表示される計算機上)は剰余を返します。forループを使用してデータを表示し、列をカウントする場合、これは非常に便利なツールです。最近、Webページを作成するときにモジュロ演算子を使用しました。私のものはPHPでしたが、これは例です:

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

これは基本的に1〜100を出力し、3アイテムごとに「3アイテム」を出力し、10アイテムごとに「10アイテム」を出力します。

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ではなく6。小数による除算の末尾の小数は、modの出力には影響しません。
ニックデウィット

そして、select 5 / 10 ;なります0、SQLではない0.5
ypercubeᵀᴹ

2

他の答えは正しいです。除算の剰余を返すのはモジュロ演算子です。

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

しかし、なぜそれが関連する操作であり、なぜそれが時々役立つのかを追加すると役立つと思います。

これX % 2は、数値が偶数か奇数かを返すため、最も使用されるものです。

偶数のすべての列を選択したいと想像してください。

SELECT * FROM table WHERE column % 2 = 0

奇数のすべての列を選択する場合は、次を実行できます。

SELECT * FROM table WHERE column % 2 = 1

他のユースケースが発生する可能性があります。たとえば、すべての列をユニットでフィルタリングする場合、これを使用してユニットにゼロがあるすべての数値を取得できます。

SELECT * FROM table WHERE column % 10 = 0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.