[ Vlatko Zdrale @ 11.10.2007. 17:17 ] @
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
[ Milan Andjelkovic @ 11.10.2007. 18:27 ] @
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 ;)
[ chachka @ 11.10.2007. 18:54 ] @
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?
[ Milan Andjelkovic @ 11.10.2007. 19:07 ] @
[term]
[ Milan Andjelkovic @ 12.10.2007. 09:42 ] @
Sta je sa resenjem koje je naveo chachka? Meni deluje prilično fino i sumnjam da može nešto bolje od toga da se napravi...
[ Vlatko Zdrale @ 12.10.2007. 13:39 ] @
Odlicno resenje, hvala, to je bas ono sto mi treba. Izvinjavam se, nisam video taj post kad sam vec poceo da odgovaram.

[Ovu poruku je menjao Vlatko Zdrale dana 12.10.2007. u 22:42 GMT+1]