Большинство похожих элементов в одной таблице

#sql #mariadb

#sql #mariadb

Вопрос:

В таблице Member_Element … (InnoDB, mysql через maria db)

   Member  Element
  1       A
  1       B
  1       C
  1       E
  2       A
  2       B
  2       C
  2       D
  3       A
  3       D
 

Я хочу получить элемент, который имеет наиболее распространенный элемент с элементом 1 (и% от silimiltude). Элемент 2 имеет общие A, B, C с элементом 1 и должен быть «победителем», потому что элемент 3 имеет только общее.

То, что у меня есть, это:

 SELECT Member,Element
FROM Member_Element
WHERE Member=1 
 AND Element IN (SELECT Element
                 FROM Member_Element
                 GROUP BY Element
                 HAVING count(*)>1)
 

что дает: элемент A, B, C … и желаемый результирующий набор будет: 2 (элемент 2)

Думаю, мне нужна помощь для следующего шага и объединения всех подзапросов.

Я видел «SQL- выбор наиболее похожего продукта», но это слишком сложно для моего понимания и потребностей.

Комментарии:

1. Ошибка: Если вы используете предложение IN, номер поля в подзапросе que должен быть равен 1, у вас есть элемент write, Элемент

2. Пожалуйста, предоставьте нам дополнительную информацию в качестве желаемого результирующего набора

3. Какую СУБД вы используете?

4. Можете ли вы расширить эту строку, я хочу получить элемент, который имеет наиболее распространенный элемент с элементом 1 (и% от silimiltude.)

5. @Joe Taras: я ввел «исправленный» код. Резервуары.

Ответ №1:

Почему бы не использовать простое соединение?

 SELECT a.member, count(a.member) as total 
FROM t1 a JOIN t1 b 
WHERE a.element=b.element AND b.member=1 AND a.member > 1 
GROUP BY a.member ORDER BY total DESC
 

Комментарии:

1. Клянусь бородой Одина, что это за обман! Ничего себе танк! Итак, ПРИСОЕДИНЯЙТЕСЬ к 1 таблице, чтобы создать 2-й вид виртуальной / копирующей таблицы ?… (хороший трюк!). И СГРУППИРУЙТЕ, создав своего рода вложенную таблицу, разделенную на.member по результату select where?…