Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 5 odgovora
  • 4.386 pregleda

Najnovija ↓

Jedna tabela vise COUNT-a 11.10.2007. u 18:17 · pre 232 meseca #1
Malo sam zardjao sa SQL-om, a trazio sam na forumima i ne mogu da nadjem neko elegantno resenje. Problem je sledeci.
Imam tabelu kao npr ovu:
Code:

user surveyID  IP
1    AAAAAA    888
2    BBBBBBB   444
3    AAAAAA    333
4    AAAAAA    888
5    BBBBBBB   888


e sad trebao bi mi izlaz kao na primer ovaj:
Code:

surveyID Total   (Total IP=888) (Total IP<>888)
AAAAAA  3              2                1
BBBBBBB 2              1                1


tj treba da dodam (Total IP=888) i (Total IP<>888) u ovaj upit:
Code:

SELECT surveyID, COUNT(*) AS Total
FROM surveys
GROUP BY surveyID
Re: Jedna tabela vise COUNT-a 11.10.2007. u 19:27 · pre 232 meseca #2
Pošto sam i ja malo zardjao, nisam uspeo da smislim nista sto bi dalo takav output a da se ne koriste neki view-ovi, subqueries i slicno (posto pretpostavljam da ti to nije elegantno). Ali sam smislio nešto drugo, što bi ti možda rešilo problem:
Code:

SELECT surveyID,COUNT(*) AS Total
FROM surveys
GROUP BY surveyID,(IP=888);


Ovako dobijaš po jedan red za svaki surveyID, pri čemu je prvi kada IP (ili TotalIP? - naveo si različito na dva mesta) nije jednak 888, a drugi kada jeste. Konkretno, ovako nešto:

mysql> SELECT surveyID,COUNT(*) AS Total FROM survey GROUP BY surveyID,(IP=888);
+----------+-------+
| surveyID | Total |
+----------+-------+
| AAAAA | 1 |
| AAAAA | 2 |
| BBBBB | 1 |
| BBBBB | 1 |
+----------+-------+


Ili isto to, samo naznačeno šta je šta:
Code:

SELECT surveyID,(IP=888) AS IP_JEDNAKO_888,COUNT(*) AS Total
FROM surveys
GROUP BY surveyID,IP_JEDNAKO_888



mysql> SELECT surveyID,(IP=888) AS IP_JEDNAKO_888,COUNT(*) AS Total FROM surveys GROUP BY surveyID,IP_JEDNAKO_888;
+----------+----------------+-------+
| surveyID | IP_JEDNAKO_888 | Total |
+----------+----------------+-------+
| AAAAA | 0 | 1 |
| AAAAA | 1 | 2 |
| BBBBB | 0 | 1 |
| BBBBB | 1 | 1 |
+----------+----------------+-------+


Jes' da nisi to tražio, ali možda ti odradi posao, a meni je bilo zanimljivo da smišljam ;)
Potpis
ex.mangel
Re: Jedna tabela vise COUNT-a 11.10.2007. u 19:54 · pre 231 mesec #3
Code:
SELECT surveyID, COUNT(*) AS Total,
       SUM(CASE WHEN IP=888 THEN 1 ELSE 0 END) AS IP_EQ_888,
       SUM(CASE WHEN IP<>888 THEN 1 ELSE 0 END) AS IP_NE_888
  FROM surveys
 GROUP BY surveyID

Da li je ovo elegantno?

offtopic @ Milan Andjelkovic: Pomocu kog taga si dobio zelena slova na crnoj podlozi?
Potpis
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming."
- Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo
Re: Jedna tabela vise COUNT-a 12.10.2007. u 14:39 · pre 231 mesec
izmenjeno 1 put, poslednji put Vlatko Zdrale 12.10.2007. u 22:42
  1. Vlatko Zdrale12.10.2007. u 22:42zapis iz teksta poruke
#6
Odlicno resenje, hvala, to je bas ono sto mi treba. Izvinjavam se, nisam video taj post kad sam vec poceo da odgovaram.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme