Perché raggruppamento in una sottoquery causa problemi
-
21-09-2019 - |
Domanda
Quando includo le 2 linee commentato nel seguente subquery, sembra che ci vuole per sempre fino a quando il mio Sybase ASE 12.5 assistente ottiene alcun risultato. Senza queste 2 righe la query viene eseguita ok. Cosa c'è di così sbagliato in questo raggruppamento?
select days_played.day_played, count(distinct days_played.user_id) as OLD_users
from days_played inner join days_received
on days_played.day_played = days_received.day_received
and days_played.user_id = days_received.user_id
where days_received.min_bulk_MT > days_played.min_MO
and days_played.user_id in
(select sgia.user_id
from days_played as sgia
where sgia.day_played < days_played.day_played
--group by sgia.user_id
--having sum(sgia.B_first_msg) = 0
)
group by days_played.day_played
Soluzione 3
ok ho scoperto quale fosse il problema
Ho dovuto includere id utente nel subquery: "dove days_played.user_id = sgia.user_id
e sgia.day_played
Altri suggerimenti
Scopri che la query fa utilizzando showplan per mostrare la spiegazione.
In questo caso non puoi eliminare la sottoquery rendendolo parte della query principale?
Potresti provare a riscrivere la query come segue?
select days_played.day_played,
count(distinct days_played.user_id) as OLD_users
from days_played
inner join days_received on days_played.day_played = days_received.day_received
and days_played.user_id = days_received.user_id
where days_received.min_bulk_MT > days_played.min_MO
and 0 = (select sum(sgia.B_first_msg)
from days_played as sgia
where sgia.user_id = days_played.user_id
and sgia.day_played < days_played.day_played
)
group by days_played.day_played
Credo che questo dovrebbe dare prestazioni migliori ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow