sql server从一个查询结果中获取多个组的结果

时间:2013-12-22 16:24:18

标签: sql-server sql-server-2008 group-by

是否可以通过一个查询的结果检索多个组?

目前我有一个自由文本书名搜索系统,它返回前X行:

首先查询书名

  SELECT TOP 16 grouped_location, grouped_author, book_title 
  FROM books 
  WHERE book_title like '%foo%'

然后查询位置组

  SELECT grouped_location, COUNT(*)
  FROM books 
  WHERE book_title like '%foo%'
  GROUP BY  grouped_location

然后查询作者组:....

是否可以通过一次搜索检索此信息? 通过向SQL服务器发送多个命令我没有问题,但目标是SQL服务器只执行一次搜索,而不是通过搜索三次来耗尽所有资源。

请记住,通过将所有记录返回给客户端并计算分组结果,客户端解决方案不是一种选择。由于性能原因,它只需要返回TOP X记录。

2 个答案:

答案 0 :(得分:1)

此查询将为您提供rowdétails,每行包含按count_location计数。 更改ORDER BY以满足您的要求

select top 16 grouped_location, grouped_author, book_title, 
    count(*) over (partition by grouped_location) as [count]
FROM books 
WHERE book_title like '%foo%'
-- order by grouped_author or some other column
order by [count] desc

答案 1 :(得分:0)

要查看仅按grouped_location分组的信息,您可以这样......

  SELECT grouped_location , COUNT(*) Totals
  FROM
  (
  SELECT TOP 16 grouped_location, grouped_author, book_title 
  FROM books 
  WHERE book_title like '%foo%'
  ORDER BY Some_Column
  ) Q
  GROUP BY grouped_location

要查看按All the columns分组的信息,您可以这样......

  SELECT grouped_location, grouped_author, book_title, COUNT(*) Totals
  FROM
  (
  SELECT TOP 16 grouped_location, grouped_author, book_title 
  FROM books 
  WHERE book_title like '%foo%'
  ORDER BY Some_Column
  ) Q
  GROUP BY grouped_location, grouped_author, book_title