2010-07-01 7 views
0

Je suis en train de sélectionner une URL top 10 distincte, c'est count (url) et la taille de log_table rejoindre d'autres tables aussi.Sélectionnez des valeurs distinctes parmi plusieurs tables d'une requête SQL Server en utilisant group by et order by?

J'ai essayé la requête SQL Server suivante:

select distinct top 10 
    url, count(url) as hits, 
    size as data 
from log_table 
where log_table.IP in 
      (select IPAddress from IP where IP.IPId in 
        (select IPId from userIP where userIP.userId in 
         (select userId from Users))) 
group by url, size 
order by hits desc 

Il ne me donne pas url distincte. Mais quand j'essaie la requête suivante sans taille, elle donne une URL et des hits distincts.

select distinct top 10 
    url, count(url) as hits 
from log_table 
where log_table.IP in 
     (select IPAddress from IP where IP.IPId in 
      (select IPId from userIP where userIP.userId in 
        (select userId from Users))) 
group by url 
order by hits desc 

Que dois-je faire pour la sélection URL distincte, il est hits et taille utilisée. url, la taille provient de la table log_table.

Toute aide est appréciée.

Merci.

+1

Si vous publiez code ou XML, ** ** S'il vous plaît mettre en évidence les lignes dans l'éditeur de texte et cliquez sur le bouton "code" (101 010) sur la barre d'outils de l'éditeur pour bien le mettre en forme et la syntaxe le mettre en évidence! –

+0

Je présume que pour chaque URL, il y a plusieurs 'size's. Alors, lequel voulez-vous ramené? –

Répondre

0

La raison pour laquelle votre première requête ne renvoie pas d'URL distinctes est que vous regroupez à la fois l'URL et la taille. Lorsque vous regroupez ces deux colonnes, vous obtenez une ligne pour chaque combinaison de valeurs. Donc si url "a" a à la fois la taille 5 et 10, alors deux groupes seront créés, [a 5] et [a 10]. Vous devrez utiliser une fonction d'agrégation sur la colonne de taille pour obtenir quelque chose, par exemple:

select top 10 
    url, count(url) as hits 
    , max(size) as size 
from log_table 
where log_table.IP in 
     (select IPAddress from IP where IP.IPId in 
      (select IPId from userIP where userIP.userId in 
        (select userId from Users))) 
group by url 
order by hits desc