hej, mam problem ktorego nie moge rozwiazac. Jest sobie tabela:

  1. [
  2. CREATE TABLE test
  3.  
  4. (
  5. id int NOT NULL AUTO_INCREMENT,
  6. user_id INT NOT NULL,
  7. form_id INT NOT NULL,
  8. sent_datetime TIMESTAMP DEFAULT NOW(),
  9. fill_datetime DATE DEFAULT NULL,
  10. PRIMARY KEY (id),
  11. FOREIGN KEY (form_id) REFERENCES question_forms (id)
  12. ON UPDATE NO ACTION ON DELETE NO ACTION
  13. );
  14. /sql]
  15.  
  16. potrzebuje wyciagnac 3 rzeczy:
  17. 1) count(id) WHERE form_id = 1
  18. 2) count(id) WHERE form_id = 1 AND fill_datetime IS NULL
  19. 3) count(id) WHERE form_id = 1 AND fill_datetime IS NOT NULL
  20.  
  21. do tego miejsca zapytanie nie sprawilo mi problemow. zrobilam je tak:
  22.  
  23. [sql]SELECT COUNT(id) AS number,
  24. (SELECT COUNT(id) FROM test WHERE fill_datetime
  25. IS NULL) AS unfilled, (SELECT COUNT(id) FROM test
  26. WHERE fill_datetime IS NOT NULL) AS filled FROM test
  27. WHERE question_form_id =1)


To zapytanie dla moich danych testowych zwraca:
  1. +--------+----------+--------+
  2. | number | unfilled | filled |
  3. +--------+----------+--------+
  4. | 4 | 3 | 1 |
  5. +--------+----------+--------+


Problem jest taki, ze musze to grupowac po sent_datetime. jesli dodam na koncu zapytania group by sent_datetime to dostane:
  1. +--------+----------+--------+
  2. | number | unfilled | filled |
  3. +--------+----------+--------+
  4. | 2 | 3 | 1 |
  5. | 1 | 3 | 1 |
  6. | 1 | 3 | 1 |
  7. +--------+----------+--------+


a powinnam dostac:

  1. +--------+----------+--------+
  2. | number | unfilled | filled |
  3. +--------+----------+--------+
  4. | 2 | 2 | 0 |
  5. | 1 | 1 | 0 |
  6. | 1 | 0 | 1 |
  7. +--------+----------+--------+


czyli grupowanie powinno tez byc po podzapytaniach.. czy ktos z Was moglby mi podpowiedziec jak to zrobic?

pzdr