2015-07-30 29 views
5

Używam dość prostej kwerendy za pomocą pakietów database/sql i lib/pq (postgres) i chcę przerzucić wyniki niektórych pól do plasterka, ale muszę wiedzieć jak duży by zrobić plasterek.Zliczanie i wynik zapytania SQL w Go

Jedyne rozwiązanie, jakie mogę znaleźć, to wykonać kolejne zapytanie, które jest po prostu SELECT COUNT(*) FROM tableName;.

Czy istnieje sposób na uzyskanie wyniku zapytania ORAZ liczby zwróconych wierszy w jednym zapytaniu?

+0

Nie możesz po prostu sprawdzić liczby wyników? rows.count() czy coś takiego? – JamieD77

+3

Nie znalazłem sposobu na sprawdzenie licznika, ale znalazłem to .. https://groups.google.com/forum/#!topic/golang-nuts/iHrXJj5MX_A wspomina o ustawianiu długości plasterka na 0 i wzrośnie po dołącz do niego: – JamieD77

+0

O ile wiem, jest to właściwa odpowiedź. Jeśli dodasz odpowiedź @ JamieD77, zaakceptuję ją. – Arel

Odpowiedz

3

koncepcyjnej, problemem jest to, że kursor w bazie nie mogą być wymienione do końca więc baza danych nie wie ile rekordów dostaniesz zanim faktycznie przeczytaj je wszystkie. Jedynym sposobem na policzenie (w ogólnym przypadku) jest przejście przez wszystkie rekordy w zestawie wyników.

Ale praktycznie, można wymusić je zrobić za pomocą podzapytania jak

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

i po prostu zignorować drugą kolumnę do ewidencji innych niż pierwszy. Ale to bardzo niegrzeczne i nie polecam tego robić.

+0

Dzięki, nie wiedziałem, że możesz wykonywać podpowiadania. W efekcie wykonałem polecenie SELECT (wybierz liczbę (*) z obserwacji WHERE id_profil = 1 $ I rok = 2 USD I miesiąc = 3 $) jako liczbę, rok, miesiąc, identyfikator_profilu, Z obserwacji WHERE id_profil = 1 $ I rok = 2 $ I miesiąc = 3 $ ', id, date.Year(), int (date.Month()))' – Arel

-1

Można by stosować count (*)

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

, która właśnie zwraca liczbę. – Arel

0

Nie jestem pewien, czy o to prosisz, ale możesz zadzwonić do funkcji @@ Rowcount, aby zwrócić liczbę wykonanych poprzednich instrukcji wyboru.

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

SELECT @@Rowcount 

Jeśli chcesz wiersz Liczba wliczone w zestaw wyników można użyć klauzuli OVER (MSDN)

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

Można też może po prostu oddzielić dwie instrukcje SQL za pomocą kabla A; . Zwróciłoby to zestaw wyników obu wykonanych instrukcji.

+0

Czy tęskniłeś za częścią pytania, w którym PO mówi, że używa PostgreSQL? –

+1

Właściwie tak, zrobiłem, ponieważ został oznaczony jako SQL. Tj. Używam kwerendy używaj bazy danych/SQL w pytaniu. Czy powinienem usunąć moją odpowiedź? – SoftwareCarpenter

Powiązane problemy