SQL выбирает ближайшие значения из нескольких столбцов и сортирует их по лучшим - PullRequest
0 голосов
/ 22 марта 2019

В моей таблице 8 столбцов, скажем так: имя моей таблицы - x_table, а столбцы: id, Score_1, Score_2, Score_3, Score_4, Score_5, Score_6, Score_7 ..

Каждый столбец Score_ * имеет оценкуот 0 до 10. Затем допустим, что я хочу найти в моей таблице следующие значения:

score_1 = 7, Score_2 = 9, Score_3 = 6, Score_4 = 9, Score_5 = 10, Score_6 = 8, Score_7= 4.

Как выбрать эту таблицу и отобразить результаты в соответствии с наилучшими ближайшими значениями

Этот запрос ниже не дает 100% того, что мне нужно:

SELECT *
FROM xc_t
WHERE t_id <> 0
    AND t_category1 BETWEEN 0
        AND 11
    AND t_category2 BETWEEN 0
        AND 11
    AND t_category3 BETWEEN 0
        AND 11
    AND t_category4 BETWEEN 0
        AND 11
    AND t_category5 BETWEEN 0
        AND 11
    AND t_category6 BETWEEN 0
        AND 11
    AND t_category7 BETWEEN 0
        AND 11
ORDER BY abs(t_category1 - 6)
    ,abs(t_category2 - 6)
    ,abs(t_category3 - 9)
    ,abs(t_category4 - 2)
    ,abs(tea_category5 - 9)
    ,abs(t_category6 - 4)
    ,abs(t_category7 - 10) limit 0
    ,20

1 Ответ

1 голос
/ 22 марта 2019

Я думаю, что вы хотите greatest():

select t.*, greatest(score_1, score_2, . . ., score_8) as max_score
from t
order by max_score desc;

Это то, что вы хотите?

select t.*
from t
order by (abs(score_1 - @score_1) +
          abs(score_2 - @score_2) +
          . . .
          abs(score_7 - @score_7)
         )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...