2010-10-12 5 views
0

Hey j'ai trouvé beaucoup de gens posant des questions semblables à la mienne mais pas exactement la même chose.comment compter plusieurs champs en sql

J'ai une base de données qui stocke les adresses IP. Il y a un champ de serveur et un champ de client. Je veux regarder à travers ces deux champs et sortir toutes les adresses IP distinctes pour eux et ensuite découvrir combien d'occurrences il y a de chaque IP en tant que client et en tant que serveur.

< - c'était un peu similaire mais pas tout à fait.

C'est ce que j'ai en ce moment:

use mydb 
select y.client_ip as "IP", 
(select count(*) 
from t_Events x 
where start_time BETWEEN '10/7/2010 08:00:00 AM' AND '10/7/2010 04:00:00 PM' AND  x.client_ip = y.client_ip) as "Count of client IP", 
(select count(*) 
from t_Events x 
where start_time BETWEEN '10/7/2010 08:00:00 AM' AND '10/7/2010 04:00:00 PM' AND x.client_ip = y.server_ip) as "Count of Server IP" 
from t_Events y 
Group By y.client_ip, y.server_ip 

cela ne fonctionne pas à la recherche parce que je me rends compte que je suis seulement à IP qui sont dans le domaine de client_ip. Alors, comment puis-je savoir comment chaque IP peut apparaître dans le serveur et dans le champ client? Dois-je d'abord créer une table temporaire?

Répondre

4

Essayez quelque chose comme ceci:

select IP, sum(ClientCount) as ClientCount, sum(ServerCount) as ServerCount 
from (
    select client_ip as IP, count(*) as ClientCount, null 
    from t_Events 
    where start_time BETWEEN '10/7/2010 08:00:00 AM' AND '10/7/2010 04:00:00 PM' 
    group by client_ip 
    union all 
    select server_ip as IP, null, count(*) as ServerCount 
    from t_Events 
    where start_time BETWEEN '10/7/2010 08:00:00 AM' AND '10/7/2010 04:00:00 PM' 
    group by server_ip 
) a 
group by IP 
Questions connexes