ugrás a tartalomhoz

Két COUNT egy lekérdezésben

fchris82 · 2008. Feb. 10. (V), 20.17
Legyen az alábbi tábla:

CREATE TABLE commissions (
  id SERIAL,
  user_id BIGINT UNSIGNED NOT NULL,
  commissions INT UNSIGNED NOT NULL
)

INSERT INTO commissions (user_id, commissions) VALUES (1, 0), (1, 100), (1, 100), (2, 0), (2, 20), (2, 100), (2, 20), (2, 0);

+----+---------+-------------+
| id | user_id | commissions |
+----+---------+-------------+
|  1 |       1 |           0 |
|  2 |       1 |         100 |
|  3 |       1 |         100 |
|  4 |       2 |           0 |
|  5 |       2 |          20 |
|  6 |       2 |         100 |
|  7 |       2 |          20 |
|  8 |       2 |           0 |
+----+---------+-------------+
Ebből szeretném egyetlen lekérdezéssel lekérdezni, hogy az adott felhasználóknak összesen mennyi bejegyzése van, és hogy ebből mennyinél nem 0 az érték:

+---------+--------+---------+
| user_id | osszes | ertekes |
+---------+--------+---------+
|       1 |      3 |       2 |
|       2 |      5 |       3 |
+---------+--------+---------+
Ezt hogyan lehetne megoldani?
 
1

Például...

vbence · 2008. Feb. 10. (V), 22.34
Egy selectes megoldás:
SELECT a.user_id, COUNT(a.commissions) AS osszeg, COUNT(b.commissions) AS ertekes FROM commissions AS a LEFT JOIN commissions AS b ON b.id=a.id AND b. commissions != 0 GROUP BY a.user_id
Persze lehetne beágyazott selecttel is...
2

signum függvény

hector · 2008. Feb. 10. (V), 22.38
Postgresben tesztelve:

SELECT user_id, count(user_id), sum(sign(comissions)) FROM teszt GROUP BY user_id;
3

mysql

vbence · 2008. Feb. 10. (V), 23.00
Remek ötlet. Azért mysqlben sem nehéz kivitelezni:
SELECT user_id, COUNT(user_id), SUM(IF(commissions=0, 0, 1)) FROM commissions GROUP BY user_id;
4

Ááááááááá

fchris82 · 2008. Feb. 10. (V), 23.12
Ez annyira egyszerű, hogy ilyenkor a fejemet a falba verném legszivesebben, hogy nekem nem jutott eszembe :D Köszi!
5

mindig tanulok valami újat

hector · 2008. Feb. 10. (V), 23.24
Nincs mit. Egyébként én is tanultam most valami újat: nem tudtam, hogy egyszerre több rekordot is lehet insertelni, thx :)