mboost-dp1

problem med SQL: Count() group by dato


Gå til bund
Gravatar #1 - djrasmusp
24. nov. 2008 17:46
jeg har et SQL-problem, som jeg håber nogen kan hjælpe mig med....

Jeg skal have antallet af uniqe datoer i en table.. indtil videre har jeg følgende datoer i min table:
2008-11-27
2008-11-27
2008-12-11
2008-12-06
2008-12-04
2008-12-13
2008-12-20
2008-12-18
2008-12-25
2008-12-26
2008-12-27
2008-12-31


hvis jeg så laver en almindelig COUNT(), uden nogen betingelser får jeg antallet 12, men hvis jeg skriver følgende:
select count(*) as rec from calendar group by dato
får jeg resultatet 2, hvilket jeg ikke kan få til at passe, da jeg vil mene resultatet sku være 11.

Nogen, der har en måde eller svar på hvordan jeg får overstående til at give det uniqe antal af datoer ?
Gravatar #2 - arne_v
24. nov. 2008 17:53
#1

Prøv:

SELECT COUNT(DISTINCT dato) FROM calendar

der bør nogle databaser ihvertfald understøtte.
Gravatar #3 - djrasmusp
24. nov. 2008 18:23
så får jeg antallet til at være til at være 1 :/
Gravatar #4 - Emil Melgaard
24. nov. 2008 21:16
Hvis du kører SQL-koden

select count(*) as rec from calendar group by dato

vil den optælle hvor mange der er er af hver dato, så der vil du få noget der ligner dette:

dato          rec
2008-11-27 2
2008-12-11 1
2008-12-06 1
2008-12-04 1
2008-12-13 1
2008-12-20 1
2008-12-18 1
2008-12-25 1
2008-12-26 1
2008-12-27 1
2008-12-31 1


Bare uden at datovariablen er med.

Jeg ved ikke om der er noget nemmere du kan bruge, men du burde ihf. kunne skrive følgende:

select count(*) as rec from (select distinct dato from calendar)
Gravatar #5 - Mort
25. nov. 2008 13:58
Hvilken database engine er det du bruger (SQLServer/MySQL/Oracle/etc) ?
Gravatar #6 - djrasmusp
25. nov. 2008 14:24
MySQL
Gravatar #7 - arne_v
27. nov. 2008 00:20
#3

mysql> SELECT @@VERSION;
+----------------+
| @@VERSION |
+----------------+
| 4.1.10a-nt-max |
+----------------+
1 row in set (0.00 sec)

mysql> CREATE TABLE calendar (id INTEGER AUTO_INCREMENT PRIMARY KEY, dato DATE);

Query OK, 0 rows affected (0.02 sec)

mysql>
mysql> INSERT INTO calendar(dato) VALUES('2008-11-27');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO calendar(dato) VALUES('2008-11-27');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO calendar(dato) VALUES('2008-12-11');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO calendar(dato) VALUES('2008-12-06');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO calendar(dato) VALUES('2008-12-04');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO calendar(dato) VALUES('2008-12-13');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO calendar(dato) VALUES('2008-12-20');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO calendar(dato) VALUES('2008-12-18');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO calendar(dato) VALUES('2008-12-25');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO calendar(dato) VALUES('2008-12-26');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO calendar(dato) VALUES('2008-12-27');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO calendar(dato) VALUES('2008-12-31');
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> SELECT * FROM calendar;
+----+------------+
| id | dato |
+----+------------+
| 1 | 2008-11-27 |
| 2 | 2008-11-27 |
| 3 | 2008-12-11 |
| 4 | 2008-12-06 |
| 5 | 2008-12-04 |
| 6 | 2008-12-13 |
| 7 | 2008-12-20 |
| 8 | 2008-12-18 |
| 9 | 2008-12-25 |
| 10 | 2008-12-26 |
| 11 | 2008-12-27 |
| 12 | 2008-12-31 |
+----+------------+
12 rows in set (0.00 sec)

mysql> SELECT COUNT(*) FROM calendar;
+----------+
| COUNT(*) |
+----------+
| 12 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(DISTINCT dato) FROM calendar;
+----------------------+
| COUNT(DISTINCT dato) |
+----------------------+
| 11 |
+----------------------+
1 row in set (0.00 sec)

mysql>
mysql> DROP TABLE calendar;
Query OK, 0 rows affected (0.02 sec)
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login