DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   SQL baze podataka - Sponzor: Baze-Podataka.net (http://www.devprotalk.com/forumdisplay.php?f=10)
-   -   Brojanje grupisanih rekorda (http://www.devprotalk.com/showthread.php?t=7913)

jablan 30. 09. 2009. 18:42

Brojanje grupisanih rekorda
 
Evo skripta za kreiranje tabele:
Kôd:

CREATE TABLE items (
    a character varying(10),
    b character varying(10),
    total integer,
    id integer NOT NULL
);

INSERT INTO items (a, b, total, id) VALUES ('a', 'b', 10, 1);
INSERT INTO items (a, b, total, id) VALUES ('a', 'c', 10, 2);
INSERT INTO items (a, b, total, id) VALUES ('a', 'd', 10, 3);
INSERT INTO items (a, b, total, id) VALUES ('b', 'd', 10, 4);
INSERT INTO items (a, b, total, id) VALUES ('b', 'd', 10, 5);
INSERT INTO items (a, b, total, id) VALUES ('c', 'd', 10, 6);
INSERT INTO items (a, b, total, id) VALUES ('c', 'c', 10, 7);
INSERT INTO items (a, b, total, id) VALUES ('c', 'b', 10, 8);
INSERT INTO items (a, b, total, id) VALUES ('c', 'd', 10, 9);
INSERT INTO items (a, b, total, id) VALUES ('c', 'b', 10, 10);
INSERT INTO items (a, b, total, id) VALUES ('a', 'b', 10, 11);

I upit:

Kôd:

test=# select a, b, sum(total) from items group by a, b;
 a | b | sum
---+---+-----
 b | d |  20
 a | c |  10
 c | b |  20
 a | d |  10
 c | d |  20
 a | b |  20
 c | c |  10
(7 rows)

Elem, meni treba upit koji vraća COUNT(*) za prethodni upit (dakle 7), ali bez korišćenja podupita, tj. bez da se ceo gornji upit wrapuje u SELECT COUNT(*) FROM ...

MorenoArdohain 30. 09. 2009. 18:54

Ne znam da li se ovo uklapa u tvoju koncepciju:
SELECT FOUND_ROWS();

jablan 30. 09. 2009. 19:03

1) Treba mi nešto database-agnostic.
2) U opštem slučaju, ne želim da izvršavam gornji query, već samo da dobijem COUNT.

MorenoArdohain 30. 09. 2009. 19:20

Mislim da to uopste nije moguce bez koriscenja podupita.

LiquidBrain 30. 09. 2009. 21:57

Ideja, ako se koristi baza koja podrzava kursore, onda ideja je da se deklarise kursor za odredjeni query i onda odesh na kraj i vidish koliko ima redova...

Mozda ovo moze da pomogne: http://www.postgresql.org/docs/8.1/s...l-cursors.html

Dejan Topalovic 30. 09. 2009. 22:47

Kad sam zadnji put citao SQL ANSI 2003 standard, cini mi se da nisam nigdje vidio jasnu definiciju pojma ROW_COUNT. Svaki database vendor je to odradio na svoj nacin, npr. Oracle na svoj, MS SQL na svoj, a odskora i MySQL na svoj nacin.

Meni ne pada na pamet nijedno rjesenje bez koristenja podupita...

Za koju bazu ti tacno treba?

kaizen 30. 09. 2009. 22:57

Kôd:

select count(distinct(concat(a,'-',b))) from items;
... pod uslovom da tabela nije velika i da database-agnostic nije uslov ;)

jablan 01. 10. 2009. 12:01

@Topalović: Baza je Postgres, ali insistiram na standardnom rešenju jer pokušavam da izvedem sve to kroz ORM, bez korišćenja suvog SQL-a, zato mi i podupit ne pije vodu. Naravno, ako ne može, ne može, prljamo ruke.

Citat:

Originalno napisao kaizen (Napišite 73682)
Kôd:

select count(distinct(concat(a,'-',b))) from items;
... pod uslovom da tabela nije velika i da database-agnostic nije uslov ;)

Na sličnu ideju sam i ja došao (samo uz korišćenje operatora || umesto funkcije CONCAT).

BTW, sve ovo pitam jer mi mislav-will_paginate (primetio sam da si i ti imao neke commitove tamo ;)) ne izračunava ispravno broj slogova pri paginaciji. :(

kaizen 01. 10. 2009. 12:21

nezgodan bag. bolje sačekaj da mislav to popravi nego da provaljuješ wp_count ;)


Vreme je GMT +2. Trenutno vreme je 03:31.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.