mboost-dp1
problem med SQL: Count() group by dato
- Forside
- ⟨
- Forum
- ⟨
- Programmering
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 ?
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 ?
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:
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)
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)
#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.