Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tìm tất cả dòng ID chia hết cho 4 trong MySQL?

Giải pháp: Toán tử modulo (%)

ID % 4 = 0 kiểm tra ID chia hết cho 4.

Ví dụ minh họa

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (ID INT, StudentName VARCHAR(10), CountryName VARCHAR(20));
mysql> INSERT INTO DemoTable VALUES(0, 'David', 'AUS'), (3, 'Chris', 'UK'), (8, 'Carol', 'US'), (9, 'Sam', 'US'), (12, 'Robert', 'UK'), (10, 'Mike', 'AUS');

Dữ liệu gốc

+------+-------------+-------------+
| ID   | StudentName | CountryName |
+------+-------------+-------------+
| 0    | David       | AUS         |
| 3    | Chris       | UK          |
| 8    | Carol       | US          |
| 9    | Sam         | US          |
| 12   | Robert      | UK          |
| 10   | Mike        | AUS         |
+------+-------------+-------------+

Truy vấn chia hết cho 4

mysql> SELECT * FROM DemoTable WHERE (ID % 4) = 0;

Kết quả

+------+-------------+-------------+
| ID   | StudentName | CountryName |
+------+-------------+-------------+
| 0    | David       | AUS         |
| 8    | Carol       | US          |
| 12   | Robert      | UK          |
+------+-------------+-------------+

Giải thích

  • % là toán tử modulo (phần dư chia)
  • ID % 4 = 0 ⇔ ID là bội số của 4: 0, 4, 8, 12, 16...
  • 0 % 4 = 0 → 0 cũng được chọn (0 chia hết cho mọi số ≠ 0)

Mở rộng: Các pattern modulo

Điều kiệnÝ nghĩaVí dụ ID
ID % 2 = 0Số chẵn0, 2, 4, 6, 8...
ID % 2 = 1Số lẻ1, 3, 5, 7, 9...
ID % 3 = 0Chia hết cho 30, 3, 6, 9, 12...
ID % 4 = 1Dư 1 khi chia 41, 5, 9, 13...
ID % 10 = 0Kết thúc bằng 010, 20, 30...

Ứng dụng thực tế

Phân chia dữ liệu (Sharding)

-- 4 shards dựa trên ID
WHERE ID % 4 = 0  -- Shard 0
WHERE ID % 4 = 1  -- Shard 1
WHERE ID % 4 = 2  -- Shard 2
WHERE ID % 4 = 3  -- Shard 3

Lấy mẫu ngẫu nhiên (Bernoulli sampling)

-- ~25% dữ liệu
WHERE RAND() < 0.25
-- Hoặc deterministic
WHERE ID % 100 < 25

Round-robin assignment

-- Gán task cho 4 worker
WHERE worker_id = (task_id % 4)

Lưu ý hiệu năng

  • Modulo trên cột index: Không dùng được index (function trên cột)
  • Bảng lớn: Cân nhắc cột computed shard_id INT AS (ID % 4) STORED + index
  • Hoặc dùng range: WHERE ID BETWEEN 0 AND 1000000 cho shard 0