2015-07-30 12 views
5

Sto eseguendo una query piuttosto semplice utilizzando i pacchetti database/sql e lib/pq (postgres) e voglio buttare i risultati di alcuni campi in una sezione, ma ho bisogno di sapere quanto è grande per fare la fetta.Ricava conteggio e risultato dalla query SQL in Go

L'unica soluzione che riesco a trovare è eseguire un'altra query che sia solo SELECT COUNT(*) FROM tableName;.

C'è un modo per ottenere il risultato della query E il conteggio delle righe restituite in una query?

+0

non puoi controllare il conteggio dei risultati? rows.count() o qualcosa del genere? – JamieD77

+3

non ho trovato un modo per controllare il conteggio ma ho trovato questo .. https://groups.google.com/forum/#!topic/golang-nuts/iHrXJj5MX_A menzioni impostando la lunghezza della sezione su 0 e crescerà una volta aggiungi ad esso – JamieD77

+0

Per quello che posso dire, questa è la risposta giusta. Se aggiungi una risposta @ JamieD77, la accetterò. – Arel

risposta

3

Concettualmente, il problema è che il cursore del database non si può enumerare fino alla fine in modo che il database non sa realmente quanti record si otterrà prima che realmente leggi tutti loro. L'unico modo per contare (in generale) è quello di passare attraverso tutti i record nel set di risultati.

Ma in pratica, è possibile applicare a farlo utilizzando sottoquery come

select *, (select count(*) from table) from table 

e ignorare la seconda colonna per i record diversi da prima. Ma è molto maleducato e io non consiglio di farlo.

+0

Grazie, non sapevo che potessi fare delle domande secondarie. Ho finito per fare 'SELECT (seleziona count (*) FROM osservazioni WHERE profile_id = $ 1 AND anno = $ 2 AND month = $ 3) come conteggio, anno, mese, profile_id, FROM osservazioni WHERE profile_id = $ 1 AND anno = $ 2 AND month = $ 3 ', id, date.Year(), int (date.Month()))' – Arel

-1

Si avrebbe utilizzato count (*)

SELECT count(distinct last) 
FROM (XYZTable) 
WHERE date(FROM_UNIXTIME(time)) >= '2013-10-28' AND 
id = 90 ; 
+0

che restituisce semplicemente il conteggio. – Arel

0

Non è sicuro se questo è ciò che si richiede, ma è possibile chiamare la funzione @ Rowcount per restituire il conteggio dell'istruzione SELECT precedente che è stata eseguita.

SELECT mytable.mycol FROM mytable WHERE mytable.foo = 'bar' 

SELECT @@Rowcount 

Se si desidera che la riga conteggio incluso nel vostro set di risultati è possibile utilizzare la clausola OVER (MSDN)

SELECT mytable.mycol, count(*) OVER(PARTITION BY mytable.foo) AS 'Count' FROM mytable WHERE mytable.foo = 'bar' 

Si potrebbe anche forse solo separare due istruzioni SQL con l'una; . Ciò restituirebbe un insieme di risultati di entrambe le istruzioni eseguite.

+0

Hai perso la parte della domanda in cui l'OP dice che stanno usando PostgreSQL? –

+1

In realtà sì, perché è stato taggato come SQL. Cioè sto facendo funzionare una domanda usa la base di dati/SQL nella domanda. Devo rimuovere la mia risposta? – SoftwareCarpenter

Problemi correlati