Aşağıdaki tabloya sahibim ve amacım, belirli bir müşteriye, belirli üreticilere nasıl derecelendirdikleri konusunda en yakın müşterileri aramaktır. Bu örnek bu SQL fiddle'da bulunabilir.MySQL: Birden çok satırın sayısal farkıyla bir SQL sorgusu sonucu nasıl sipariş edilir?
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
Örnek: Biz bulmak istiyoruz
hangi müşterilerin en iyi eşleşme müşteri 'A' iki üreticileri için bir puana sahip, manuf_A ve manuf_B.
İstenilen sonuçlar:
customer difference
D 4
B 7
C 11
Beklenen algoritması:
- fark değeridir küçük, daha yakın bir müşteri değilse iki müşteri
- olan ilgili Herhangi bir üretici puanını konu olan müşteri ile paylaşın, mevcut olmayan derecelendirmeleri sıfır olmalıdır.
B farkı:
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ı farkı:
D farkı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
:
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
bu MySQL yapılabilir ilgili herhangi bir tavsiye de alınacağı alternatif bir yaklaşımın önerileri ile birlikte.
Sadece bir yorum: Bu gerçekten iyi yazılmış bir sorudur. SQL Fiddle örneği sağladınız (çalışır). Sorunu açık bir şekilde açıkladınız. Bonus olarak, ilginç bir sorundur. –
[Euclidean distance] (https://en.wikipedia.org/wiki/Euclidean_distance) daha iyi bir yaklaşım olabilir. –
@PaulSpiegel. . . Eğer kendinizi daha iyi hissettirirseniz, bu Manhattan mesafesi olarak adlandırılır ve böyle bir sorun için mükemmeldir. –