Исходная таблица выглядит следующим образом:
Я хочу создать таблицу со всеми уникальными парами в одном и том же session_id (я хочу иметь возможность сделать это с помощью SQL или, что более предпочтительно, с помощью SQLAlchemy Python).
Ниже приведен пример таблицы, которую я хочу создать из приведенной выше таблицы примеров:
что ты уже испробовал? В какой части вы застряли?
Добавьте новый идентификатор session_id только с одним элементом и соответствующим образом обновите ожидаемый результат.
@jarlh сейчас я использую sqlite. Тип создания фляжного приложения
@jarlh не уверен, что ты имеешь в виду под своим вторым комментарием
@matszwecja пока ничего, я не профессионал в sql
Кроме того, вы действительно уверены, что это то, что вам нужно сделать? Такие пары не должны храниться в БД, это очень неэффективно с точки зрения хранения данных.
@matszwecja, как лучше всего это хранить?
@matszwecja это в основном используется для анализа правил ассоциации, я не вижу другого способа
Трудно сказать, не зная вашего фактического варианта использования, но, скорее всего, вычисление его в реальном приложении из исходной таблицы было бы намного лучше. Допустим, у вас есть 20 элементов с одинаковым идентификатором сеанса. Это станет 190 парами, поэтому вы используете более чем в 9,5 раз больше места для хранения данных. И становится еще хуже, чем больше повторяющихся идентификаторов сеансов вы получаете. Это негативно влияет как на время отклика, так и на размер базы данных.
@matszwecja, но мне нужна вторая таблица, чтобы знать, из какого session_id исходит определенная пара. Поскольку мне нужно получить больше информации об определенной паре из третьей таблицы, используя session_id. Поэтому, если я сделаю это в реальном приложении, я буду делать это каждый раз, когда пользователь нажимает на пару, что сделает его очень медленным.
Вы должны быть в состоянии сделать это с помощью grouping across session_id, title
, однако это вопрос ЕСЛИ вы должны, а не МОЖЕТЕ ли вы
Вы можете выполнить самосоединение следующим образом:
select a.session_id,
a.item item_a,
b.item item_b
from table_name a join table_name b
on a.session_id = b.session_id
and a.item > b.item
order by a.session_id, a.item
Обратите внимание, что этот запрос не вернет ни одной строки для идентификаторов сеанса только с одним элементом.
как вы думаете, как лучше всего обрабатывать идентификаторы сеансов с помощью одного элемента?
Добро пожаловать, что вы хотите показать в столбце item_b? Null или повторить значение item_a? или, может быть, значение по умолчанию.
Я хочу, чтобы это было Null
Вы можете выполнить левое соединение и использовать функцию окна подсчета, проверьте это dbfiddle.uk/jmPk60Tm
Какие СУБД вы используете?