使用group by和order by从SQL Server查询中的许多表中选择不同的值?

时间:2010-07-01 06:16:29

标签: sql sql-server tsql

我正在尝试选择不同的前10个网址,它是从log_table加入其他表格的计数(网址)和大小。

我尝试了以下SQL Server查询:

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

它没有给我明确的网址。但是当我尝试不带大小的以下查询时,它会提供不同的URL和命中。

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

我需要做什么来选择不同的网址,它的命中和大小。 url,size来自log_table表。

感谢任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

您的第一个查询未返回不同网址的原因是您正在按网址和大小进行分组。当您按这两列进行分组时,您将为每个值组合获取一行。因此,如果url“a”的大小为5和10,那么将创建两个组,[a 5]和[a 10]。你必须在size列上使用一些聚合函数才能得到回报,例如:

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