Mô phỏng hành vi IN() bằng LIKE và COUNT/IF trong MySQL
Đếm số bản ghi chứa các từ khóa cụ thể trong cột văn bản.
Tạo bảng và dữ liệu
mysql> create table DemoTable ( Subject varchar(80) ); Query OK, 0 rows affected (0.58 sec)
mysql> insert into DemoTable values('MySQLMongoDB');
mysql> insert into DemoTable values('MySQL');
mysql> insert into DemoTable values('JavaMySQL');
mysql> insert into DemoTable values('MongoDB');
mysql> insert into DemoTable values('Java');
Truy vấn đếm theo từ khóa
mysql> select
count(if(Subject like '%MySQL%',1,NULL)) as MySQLCount,
count(if(Subject like '%Java%',1,NULL)) as JavaCount,
count(if(Subject like '%MongoDB%',1,NULL)) as MongoDBCount
from DemoTable;
Kết quả
+------------+-----------+--------------+ | MySQLCount | JavaCount | MongoDBCount | +------------+-----------+--------------+ | 3 | 2 | 2 | +------------+-----------+--------------+
Giải thích:
- MySQLCount = 3: 'MySQLMongoDB', 'MySQL', 'JavaMySQL' chứa 'MySQL'
- JavaCount = 2: 'JavaMySQL', 'Java' chứa 'Java'
- MongoDBCount = 2: 'MySQLMongoDB', 'MongoDB' chứa 'MongoDB'
Lưu ý: Một bản ghi có thể được đếm trong nhiều nhóm (ví dụ 'MySQLMongoDB' tính cho cả MySQL và MongoDB). Đây khác với IN() thuần túy - IN() kiểm tra giá trị chính xác, LIKE kiểm tra chuỗi con.