У меня есть таблица, которая содержала следующие размеры:Логическое ИЛИ в SQLite
mkt_id, dow, dvc, feat, val
вал имеет тип текста и содержит истина/ложь. (mkt_id, dow, dvc, feat) формирует ключ, а val представляет значение.
Для выбора различных ключа - пары значений, я использовал запрос:
SELECT * from <tablename> where mkt_id in (...) and feat = 'xyz'
СЛЕДУЮЩИЙ: Еще один аспект был добавлен карапуз он таблица называется ptd
.
Для той же комбинации ключей (mkt_id, doq, dvc, feat) Я получил несколько значений val
из-за добавленного измерения ptd
.
Теперь мое требование состоит в том, что я должен вывести значение как Истинное, если какое-либо значение для определенного ключа (mkt_id, doq, dvc, feat) истинно в противном случае false.
Моя попытка решения:
SELECT mkt_id, dow, dvc, feat,
CASE WHEN trueCount >= 1 THEN 'true' ELSE 'false' END as val
FROM(SELECT DISTINCT mkt_id,dow,dvc,feat,
SUM(CASE WHEN val='true' THEN 1 ELSE 0 END) AS trueCount
FROM <tablename> WHERE mkt_id in (...) and feat = 'xyz'
Проблема заключается в том, что этот запрос занимает много времени, чтобы выполнить и в конечном счете ошибки из-за database or disk full
.
Любая помощь в оптимизации запроса или другом подходе к решению высоко ценится.
Есть ли способ избежать «GROUP BY»? Группа увеличивает стоимость запроса, и я хотел бы избежать его, если это возможно. – user2400394
Независимо от запроса он должен * каким-то образом * искать и объединять строки с соответствующими значениями 'mkt_id' /' dow'/'dvc' /' feat'. С GROUP BY оптимизация не менее * возможна *. –