Rechercher : dans
Par :

SQL > select count distinct group by ACCESS

Dernière réponse le 30 oct 2008 à 11:17:38 gerarcyr, le 22 fév 2008 à 16:24:37 
 Signaler ce message aux modérateurs

Bonjour,
j'ai un problème avec une requete SQL qui intégre un DISTINCT, un COUNT et un GROUP BY.

Voici les champs de ma db : URL, IP, DATE1

A chaque connexion, on enregistre donc l'IP, la date et l'URL.

En fait, je voudrais connaitre le nombre de visiteurs unique qu'il y a eu sur mon site chaque jour à une adresse précise.
ex:
lundi 1 => 22 visiteurs
mardi 2 => 12 visiteurs
mercredi 3 => 54 visiteurs
etc...

Voici la requete SQL qui ne fonctionne pas :

SELECT count(*) as nb
FROM (SELECT distinct ip, date1 as d1 FROM stats2008)
WHERE url='http://...'
GROUP BY date1

Merci de votre aide,

Configuration: Windows 2000
Internet Explorer 6.0

Meilleures réponses pour « SQL > select count distinct group by ACCESS » dans :
SQL - Commande SELECT VoirLe langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la...
SQL - Jointures VoirExpression des jointures Une jointure (ou θ-jointure) est un produit cartésien de deux tables. On appelle équijointure une θ-jointure dont la qualification est une égalité entre deux colonnes. En SQL, l'expression d'une jointure se...

1

lancetre06, le 22 fév 2008 à 16:43:49
  • +1

Bonjour,
Voila pas mal de temps que je me suis frotté à SQL, mais à votre place je décomposerais cette requete pour vérifier que le select intégré fonctionne seul.
Ensuite si ça fonctionne, je relancerai la requete complete sans le group by.

Voilà ce n'est qu'une méthode...

Bon courage

Tenez moi au courant si ça a marché..ça fait toujours plaisir.

Répondre à lancetre06

4

gerarcyr, le 22 fév 2008 à 16:51:33

J'ai trouvé la solution... je la poste si cela peut aider d'autres personnes...

SELECT date1 as nb, Count (ip) as nb2
FROM (SELECT DISTINCT ip, date1 FROM stats2008 WHERE url='mon url')
GROUP BY date1

Cyril.

Répondre à gerarcyr

12

 Thomak, le 30 oct 2008 à 11:17:38

Merci pour cette solution!
Fonctionne sous ACCESS 2000, j'ai testé!!

Répondre à Thomak

2

Velvel-Miho, le 22 fév 2008 à 16:44:42
  • +1

Le problème viens du FROM, ça saute au nez.
Il faut mettre un table et pas autre chose.

La manipulation est simple :

SELECT ip, date
FROM stats2008
WHERE url='http'
GROUP BY ip, date

Déjà cette requete te donne la liste de ceux qui ce sont connecter pour tel ou tel jour.

Maintenant, il faut que tu compte combien y en a .

Répondre à Velvel-Miho

3

gerarcyr, le 22 fév 2008 à 16:49:17

Merci de ta réponse.

Je suis d'accord avec toi, mais dis moi juste comment compter les IPs ?

Répondre à gerarcyr

5

kij_82, le 22 fév 2008 à 16:53:58

Bonjour,

Qu'est ce qui ne va pas exactement dans ta requête ?
Sinon, lorsque tu fais un GROUP BY, tu ne peux le faire que sur des champs que tu sélectionne via ta requête. Dans ton cas tu essai de faire un GROUP BY date1 alors que tu ne la sélectionne pas (SELECT count(*) as nb).

Je rajouterai donc ceci dans ta requête :

SELECT DISTINCT  date1, count(*) as total
FROM (SELECT distinct ip, date1 FROM stats2008)
WHERE url='http://...'
GROUP BY date1 


Par contre je ne sais plus comment se gère le disctinct donc je ne peux pas plus t'aider.

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

6

Velvel-Miho, le 22 fév 2008 à 16:55:59

Et bien, voyons voir ...

Si c'est bien sur access, tu peux faire donc :

Enregistre une 1ière requete :
SELECT ip, date
FROM stats2008
WHERE url='http'
GROUP BY ip, date
Tu l'a nomme "requete1"

Puis tu fais une seconde requete :
SELECT count(ip)
FROM requete1
GROUP BY date

Et le tour est joué.

Répondre à Velvel-Miho

7

Neverend, le 22 fév 2008 à 16:59:18

Salut

SELECT count(*) as nb
FROM stats2008
WHERE (SELECT distinct ip, date1 as d1 FROM stats2008) and url='http://...'
GROUP BY date1

test ça

Répondre à Neverend

8

gerarcyr, le 22 fév 2008 à 17:00:56

[Microsoft][ODBC Microsoft Access Driver] You have written a subquery that can return more than one field without using the EXISTS reserved word in the main query's FROM clause. Revise the SELECT statement of the subquery to request only one field.

Répondre à gerarcyr

9

Neverend, le 22 fév 2008 à 17:01:18
  • +1

Oups erreur

SELECT count(*) as nb
FROM stats2008
WHERE (SELECT distinct ip, date1 as d1 FROM stats2008 WHERE url='http://...')
GROUP BY date1

Répondre à Neverend

10

gerarcyr, le 22 fév 2008 à 17:05:23

Non j'ai toujours la meme erreur...

Mais le pb est resolu.
Merci a tous pour vos reponse

Répondre à gerarcyr

11

kij_82, le 22 fév 2008 à 17:07:41
  • +4

Si ton problème est résolu il serait bon de partager la solution avec les autres :) ainsi que de mettre le tag résolu pour la discution.
Merci.

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82