0

いくつかのフィールドを持つテーブルがあります。最初のフィールドはuserId. ハッシュ関数を使用して、userId でデータを分割しています。

次のクエリを実行しています。

SELECT userId, HASH(userId) as hashedId, HASH(userId) % 3 as hashedIdMod3
FROM mydataset.mytable LIMIT 1000

たとえば、次のようになります。

-5655326518438853587 % 3 ==> -1 when it should be 2
HASH(27315207816077732041734307321022553299) is -3139846784539570547 and the remainder is -2 when divided by 3 when it should be 1

では、正の整数で割った余りが負になるのはなぜでしょうか?

4

1 に答える 1

1

負の数の mod は、SQL (および c++、Java など) では負です。ABS()したがって、次のように --を使用する必要があります 。

SELECT userId, 
  HASH(userId) as hashedId, 
  ABS(HASH(userId) % 3) as hashedIdMod3
FROM mydataset.mytable LIMIT 1000
于 2013-05-23T17:02:31.420 に答える