SQL — как добиться подсчета очков и сопоставления категорий?

Я пытаюсь добиться оценки и сопоставления в MySQL. У меня есть таблица с 3 уровнями категории level1 (конечный родитель), level2 (родительский) и level3 (дочерний). Я пытаюсь присвоить оценку каждой новой категории данных, которую я получаю извне, и присвоить ее определенному идентификатору категории из моей таблицы score += r.score * weight

+----+------------------------------------+-----------------------------+--------------------+
| ID | LEVEL1                             | LEVEL2                      | LEVEL3             |
+----+------------------------------------+-----------------------------+--------------------+
| 1  |  Arts and Entertainment Businesses |  Casinos                    |  NULL              |
| 1  |  Arts and Entertainment Businesses |  Performing Arts Businesses |  Radio Stations    |
| 2  |  Auto Sales Businesses             |  Motorcycle Dealers         |  Motorcycle Parts  |
| 2  |  Auto Sales Businesses             |  RVs and Motor Home Dealers |  NULL              |
| 2  |  Auto Sales Businesses             |  Car Dealers                |  Used Cars Dealers |
| 3  |  Bars and Lounges                  |  Pubs and Dive Bars         |  Pubs              |
| 3  |  Bars and Lounges                  |  Wine Bars                  |  NULL              |
| 4  |  Restaurants                       |  American Restaurants       |  Barbeque          |
+----+------------------------------------+-----------------------------+--------------------+

Выше приведена моя основная таблица с категорией.

Что я пытаюсь сделать:

If input = 'Radio',
   Then match to LEVEL3 'Radio Station' with score less than 1.0
If LEVEL3 is NULL, Move up to LEVEL2
   Then Match to LEVEL2 
IF LEVEL2 is NULL, Move up to LEVEl1
   Then Match to LEVEL1

scores: 0.0(No Match) to 1.00 (Exact match)
        0.8 - 0.99 (Very good Match)

Я пытаюсь рассчитать оценку близости для всех входных переменных, а затем присвоить им идентификатор. Если нет данных на уровне 3 и уровне 2, то для каждого УРОВНЯ 1 есть строка, где УРОВЕНЬ 2 и УРОВЕНЬ 3 обозначены Other, что будет соответствовать наименьшему количеству очков.

Я действительно пытаюсь обернуть это SQL, не переходя к Python ML/AI и не переделывая его. (если это невозможно в SQL, я перейду на Python) Любые мысли будут полезны.

Ожидаемый результат:

Input = Used Cars
Output = [ID: 2 ,LEVEL1 : Auto Sales Business]

Пожалуйста, посмотри: Я понимаю, что это может быть не совсем техническая проблема/ошибка кода. Я понимаю правила stackoverflow, запрещающие публиковать обсуждение, и сосредотачиваюсь на получении ответа. Любые указатели/код SQL/скрипт Python мне очень помогут. Спасибо.

добавить правильный образец данных и ожидаемый результат

ScaisEdge 01.05.2019 18:42

Добавил ожидаемый результат. Образец данных — это таблица (подмножество основной таблицы)

Ravi 01.05.2019 18:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вот один из вариантов в sql, использующий длину символа для присвоения оценки.-

DECLARE @imput varchar(300) = 'Radio';

WITH Data AS (
SELECT  1  as id,  'Arts and Entertainment Businesses' AS Level1,  'Casinos'                    AS Level2,  NULL               AS Level3 Union
SELECT  1  as id,  'Arts and Entertainment Businesses' AS Level1,  'Performing Arts Businesses' AS Level2,  'Radio Stations'   AS Level3 Union
SELECT  2  as id,  'Auto Sales Businesses'             AS Level1,  'Motorcycle Dealers'         AS Level2,  'Motorcycle Parts' AS Level3 Union
SELECT  2  as id,  'Auto Sales Businesses'             AS Level1,  'RVs and Motor Home Dealers' AS Level2,  NULL               AS Level3 Union
SELECT  2  as id,  'Auto Sales Businesses'             AS Level1,  'Car Dealers'                AS Level2,  'Used Cars Dealers'AS Level3 Union
SELECT  3  as id,  'Bars and Lounges'                  AS Level1,  'Pubs and Dive Bars'         AS Level2,  'Pubs'             AS Level3 Union
SELECT  3  as id,  'Bars and Lounges'                  AS Level1,  'Wine Bars'                  AS Level2,  NULL               AS Level3 Union
SELECT  4  as id,  'Restaurants'                       AS Level1,  'American Restaurants'       AS Level2,  'Barbeque'         AS Level3 
)

SELECT * 
    ,CAST(Len(@imput) AS numeric(18,2))/Len(COALESCE(Level3,Level2,Level1)) AS Score 
FROM data
WHERE COALESCE(Level3,Level2,Level1) LIKE '%'+ @imput + '%'

Спасибо, я использую это как отправную точку

Ravi 01.05.2019 19:32

Другие вопросы по теме