2015-09-04 2 views
1

У меня есть таблица, которая содержала следующие размеры:Логическое ИЛИ в 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.

Любая помощь в оптимизации запроса или другом подходе к решению высоко ценится.

ответ

1

Чтобы получить один выходной строки для каждой комбинации mkt_id/dow/dvc/feat, использовать GROUP BY на этих колонках.

При сравнении строк, true больше false, так что вы можете использовать MAX(), чтобы выбрать его:

SELECT mkt_id, dow, dvc, feat, MAX(val) AS val 
FROM MyTableNameIsTopSecret 
WHERE ... 
GROUP BY mkt_id, dow, dvc, feat 

(The GROUP BY может быть оптимизировано с одним индексом на этих четырех столбцов, столбцы используемый в ГДЕ, должен быть первым в индексе.)

+0

Есть ли способ избежать «GROUP BY»? Группа увеличивает стоимость запроса, и я хотел бы избежать его, если это возможно. – user2400394

+0

Независимо от запроса он должен * каким-то образом * искать и объединять строки с соответствующими значениями 'mkt_id' /' dow'/'dvc' /' feat'. С GROUP BY оптимизация не менее * возможна *. –

Смежные вопросы