php / mysql - сравнить несколько столбцов из 2 таблиц и показать наибольшее различие - PullRequest
0 голосов
/ 08 октября 2018

У меня есть 1 главная таблица со всей моей информацией и 1 таблица с почти такой же структурой, но немного другими значениями.Теперь я хочу сравнить эти значения и получить обратно самую высокую разницу.Я получил это, работая с запросом для каждого столбца (a1-a5) и в цикле каждого запроса я запрашиваю снова и делаю некоторые вычисления с результатами ... Я не знаю, это грязно, и я не уверен, как это получить

Это структура двух таблиц:

+----------+----------+--------+-----+-----+-----+-----+-----+--------------+
| HomeTeam | AwayTeam | Result |  a1 |  a2 |  a3 |  a4 |  a5 |  Date        |
+----------+----------+--------+-----+-----+-----+-----+-----+--------------+
| team1    | team2    |      H |  5  |  2  |  4  |  4  |  3  |  11-04-2017  |
| team3    | team4    |      A |  6  |  8  |  4  |  2  |  6  |  11-04-2017  |
| team1    | team3    |      D |  3  |  7  |  9  |  7  |  2  |  12-04-2017  |
| team4    | team2    |      H |  2  |  4  |  8  |  6  |  5  |  12-04-2017  |
+----------+----------+--------+-----+-----+-----+-----+-----+--------------+

+----------+----------+-----+-----+-----+-----+-----+
| HomeTeam | AwayTeam |  a1 |  a2 |  a3 |  a4 |  a5 |
+----------+----------+-----+-----+-----+-----+-----+
| team1    | team2    |  2  |  3  |  5  |  3  |  3  |
| team3    | team4    |  5  |  7  |  5  |  2  |  3  |
| team1    | team3    |  4  |  2  |  8  |  6  |  5  |
| team4    | team2    |  2  |  5  |  5  |  6  |  4  |
+----------+----------+-----+-----+-----+-----+-----+

И вот что я хочу напечатать:

team 1 vs team 2 biggest increase was 150% (a1 -> 5 vs 2) on 11-04-2017 
team 3 vs team 4 biggest increase was 100% (a5 -> 6 vs 3) on 11-04-2017 
team 1 vs team 3 biggest increase was 250% (a2 -> 7 vs 2) on 12-04-2017 
team 4 vs team 2 biggest increase was 60% (a3 -> 8 vs 5) on 12-04-2017 

Пока яЯ набираю это, я думаю, возможно, просто использовать один запрос, чтобы получить все из обеих таблиц и использовать значения, чтобы сделать некоторые вычисления?Не уверен ... кто-то, кто может дать мне большой удар в правильном направлении о том, как это сделать?

1 Ответ

0 голосов
/ 08 октября 2018

Мы можем использовать GREATEST здесь, чтобы найти наибольший спред для каждого совпадения:

SELECT
    HomeTeam,
    AwayTeam,
    GREATEST(t1.a1 - t2.a1, t1.a2 - t2.a2, t1.a3 - t2.a3, t1.a4 - t2.a4, t1.a5 - t2.a5) AS max_diff
FROM table1 t1
INNER JOIN table2 t2
    ON t1.HomeTeam = t2.HomeTeam AND t1.AwayTeam = t2.AwayTeam;

Если вы хотите также получить фактические значения a, тогда будет намного больше работы, особенноучитывая, что ваши данные не нормализуются.Возможно, вы захотите нормализовать ваши данные для чего-то более сложного, чем указано выше.

...