Предположим, у меня есть эта таблица - t1:
col1|col2|col3|score
x |y |a |1
y |x |b |2
z |w |c |4
w |z |d |2
, и я хочу сгруппировать по col1 и col2 таким образом, чтобы не имело значения, получено ли значение из col1 или col2, поэтому x | y и y | x сгруппированы вместе. Агрегирующая функция может быть, например, AVG. И я также хочу сохранить информацию в столбце 3, поэтому я хочу получить результат:
col1|col2|col3|score
x |y |a |1.5
y |x |b |1.5
z |w |c |3
w |z |d |3
Я смог сделать это так:
create table t2 as select min(col1,col2) as col1, max(col1,col2) as col2 , avg(score) as score from t1 group by min(col1, col2), max(col1, col2);
select * from t1 inner join t2 on (t1.col1 = t2.col1 and t1.col2 = t2.col2) or (t1.col1 = t2.col2 and t1.col2 = t2.col1);
но:
а. Я не уверен, что это правильно и
б. Для работы с реальными данными (таблица с 300 тыс. Строк) используется SQLite.
Существует ли более простой / быстрый способ сделать это?
Спасибо!