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

Đếm số lần xuất hiện của cặp giá trị từ 2 cột trong MySQL

Khi cần đếm tần suất của các cặp giá trị từ 2 cột (ví dụ: cặp bạn bè, cặp đối thủ), dùng GREATEST() và LEAST() để chuẩn hóa thứ tự cặp (A,B) và (B,A) được coi là cùng một cặp.

Ví dụ minh họa

Tạo bảng và chèn dữ liệu:

CREATE TABLE DemoTable (Name1 VARCHAR(20), Name2 VARCHAR(20));
INSERT INTO DemoTable VALUES 
('John','Adam'), ('Chris','David'), ('Robert','Mike'),
('David','Chris'), ('Mike','Robert');

Truy vấn đếm cặp (không phân biệt thứ tự):

SELECT 
    GREATEST(Name1, Name2) AS TenLonHon,
    LEAST(Name1, Name2) AS TenNhoHon,
    COUNT(*) AS SoLanXuatHien
FROM DemoTable
GROUP BY GREATEST(Name1, Name2), LEAST(Name1, Name2);

Kết quả

TenLonHonTenNhoHonSoLanXuatHien
JohnAdam1
DavidChris2
RobertMike2

Giải thích

  • GREATEST(a,b): Trả về giá trị lớn hơn (theo thứ tự alphabet cho chuỗi).
  • LEAST(a,b): Trả về giá trị nhỏ hơn.
  • Cặp (Chris, David) và (David, Chris) đều thành (David, Chris) → gom thành 1 nhóm, đếm = 2.

Ứng dụng thực tế

  • Phân tích mối quan hệ đối xứng: bạn bè, tin nhắn 2 chiều, trận đấu.
  • Phát hiện cặp trùng lặp trong dữ liệu không có thứ tự.

Lưu ý

Cách này chỉ hoạt động đúng khi so sánh 2 cột cùng kiểu dữ liệu. Với số liệu, GREATEST/LEAST so sánh giá trị số. Với chuỗi, so sánh theo collation (thường là alphabet).