#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?…