Tôi có bảng sau đây và mục tiêu của tôi là tìm kiếm khách hàng gần giống nhất với một khách hàng nhất định khác trong cách họ xếp hạng các nhà sản xuất nhất định. Ví dụ này có thể được tìm thấy trong số này SQL fiddle.MySQL: Cách đặt hàng kết quả truy vấn SQL bằng số khác biệt của nhiều hàng?
customer manufacturer rating
A Manuf_A 8
A Manuf_B 3
B Manuf_A 4
B Manuf_Y 3
C Manuf_X 3
C Manuf_Y 7
D Manuf_A 8
D Manuf_B 7
Ví dụ:
Chúng tôi muốn tìm mà khách hàng tốt nhất phù hợp với khách hàng 'A' người có một đánh giá cho hai nhà sản xuất, manuf_A và manuf_B.
kết quả mong muốn:
customer difference
D 4
B 7
C 11
thuật toán dự kiến:
- càng nhỏ giá trị khác biệt là, gần gũi hơn liên quan đến hai khách hàng là
- Nếu một khách hàng không chia sẻ bất kỳ xếp hạng của nhà sản xuất nào với khách hàng chủ đề, xếp hạng không tồn tại của chúng phải bằng 0. Sự khác biệt
B:
abs(A.manuf_A.rating (8) - B.manuf_A.rating(4)) = 4
abs(A.manuf_B.rating (3) - B.manuf_B.rating(Doesn't exist/0)) = 3
= 4 + 3
= 7
C khác biệt:
abs(A.manuf_A.rating (8) - C.manuf_A.rating(Doesn't exist/0)) = 8
abs(A.manuf_B.rating (3) - C.manuf_B.rating(Doesn't exist/0)) = 3
= 8 + 3
= 11
D khác biệt:
abs(A.manuf_A.rating (8) - D.manuf_A.rating(8)) = 0
abs(A.manuf_B.rating (3) - D.manuf_A.rating(7)) = 4
= 0 + 4
= 4
Bất cứ lời khuyên về cách thức này có thể được thực hiện trong MySQL sẽ được đón nhận nồng nhiệt cùng với bất kỳ đề xuất nào về cách tiếp cận thay thế.
Chỉ cần một bình luận: Đây là một câu hỏi thực sự được viết tốt. Bạn đã cung cấp một ví dụ SQL Fiddle (hoạt động). Bạn đã giải thích rõ vấn đề. Là một tiền thưởng, nó là một vấn đề thú vị. –
[Khoảng cách Euclide] (https://en.wikipedia.org/wiki/Euclidean_distance) có thể là một cách tiếp cận tốt hơn. –
@PaulSpiegel. . . Nếu nó làm cho bạn cảm thấy tốt hơn, điều này được gọi là Manhattan khoảng cách và là hoàn toàn hợp lý cho một vấn đề như thế này. –