Domanda

In breve ho 2 tabelle:

Gli utenti:

------------------------
UserID   |   Name
------------------------
0     a
1     b
2     c

CALLS:
------------------------
ToUser   |   Result
------------------------
0     ANSWERED
1     ENGAGED
1     ANSWERED
0     ANSWERED

Ecc., ecc. (utilizzo un riferimento numerico per il risultato nella realtà)

Ho oltre 2 milioni di record ciascuno dei quali dettaglia una chiamata a un cliente specifico. Attualmente sto usando le dichiarazioni Case per contare ogni ripetizione di un particolare risultato DOPO aver già eseguito il conteggio totale rapido:

COUNT(DISTINCT l_call_log.line_id),
COALESCE (SUM(CASE WHEN l_call_log.line_result = 1 THEN 1 ELSE NULL END), 0) AS [Answered],
COALESCE (SUM(CASE WHEN l_call_log.line_result = 2 THEN 1 ELSE NULL END), 0) AS [Engaged], 
COALESCE (SUM(CASE WHEN l_call_log.line_result = 4 THEN 1 ELSE NULL END), 0) AS [Unanswered]

Sto eseguendo 3 scansioni dei dati dopo il conteggio totale iniziale? in tal caso, esiste un modo per eseguire una scansione e contare le chiamate di conseguenza in una volta sola?

Grazie.

È stato utile?

Soluzione

Questo richiederebbe una scansione completa della tabella.

MODIFICA : non ci sono abbastanza informazioni per rispondere; perché la rimozione duplicata (DISTINCT) che mi mancava prima, non possiamo dire quale strategia sarebbe stata usata .... soprattutto senza conoscere il motore di database.

In quasi tutti i principali motori di query, ogni funzione aggregata viene eseguita per ogni colonna per ogni riga e può utilizzare un risultato memorizzato nella cache (come COUNT (*) per esempio).

Line_result è indicizzato? In tal caso, potresti sfruttare una query migliore (GROUP BY + COUNT (*) per sfruttare le statistiche dell'indice, anche se non sono sicuro che valga la pena dipendere dalle altre tue tabelle nella query.

Altri suggerimenti

Esiste la costruzione GROUP BY in SQL. Prova:

SELECT COUNT(DISTINCT l_call_log.line_id)
  GROUP BY l_call_log.line_result

Immagino che sia una scansione della tabella, dal momento che non hai subquery dipendenti. Esegui spiegare la query per essere sicuri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top