首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server ORDER BY [aggregation] DESC/ASC

SQL Server ORDER BY [aggregation] DESC/ASC
EN

Stack Overflow用户
提问于 2012-04-06 07:06:37
回答 3查看 8.2K关注 0票数 2

我希望能够按升序或降序对评论进行排序。我尝试在"order by“子句中再次执行聚合,但不起作用。我还尝试在子查询之外进行排序,这使我可以使用别名注释,但只能在第0行和第10行之间进行排序。

此查询是一个更大查询的较小版本。

代码语言:javascript
复制
SELECT *
FROM   (SELECT ISNULL((SELECT COUNT("order")
                       FROM   order_comment
                       WHERE  "order" = "order"."id"
                       GROUP  BY "order"), 0)                 AS [comment],
               Row_number() OVER (ORDER BY "order"."id" DESC) AS [rownum]
        FROM   [order]
        WHERE  ISNULL((SELECT COUNT("order")
                       FROM   order_comment
                       WHERE  "order" = "order"."id"
                       GROUP  BY "order"), 0) > 0) AS [filter]
WHERE  [rownum] BETWEEN 0 AND 10

在MySql中非常简单!

代码语言:javascript
复制
SELECT Ifnull((SELECT COUNT(`order`)
               FROM   order_comment
               WHERE  `order` = `order`.`id`
               GROUP  BY `order`), 0) AS `comment`
FROM   `order`
HAVING `comment` > 0
ORDER  BY `comment` DESC
LIMIT  0, 10  
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-10 02:07:56

在最新的编辑之后,怀疑你想要这样的东西

代码语言:javascript
复制
;WITH oc AS
(
SELECT [order], 
       COUNT([order]) AS order_count
FROM   order_comment 
GROUP  BY [order]
), occ AS
(
SELECT o.*,
       order_count AS comment,
       ROW_NUMBER() OVER (ORDER BY order_count DESC) AS  [rownum]
FROM [order] o
INNER JOIN oc ON oc.[order] = o.id
)
SELECT *
FROM occ 
WHERE  [rownum] BETWEEN 0 AND 10
ORDER BY [rownum]

order_comment中,INNER JOIN将排除任何没有子行的行

票数 5
EN

Stack Overflow用户

发布于 2012-04-06 07:20:18

我假设您不知道可以将OVER clause与聚合函数一起使用。

代码语言:javascript
复制
COUNT(order) OVER(PARTITION BY id) AS [comment]
....
ORDER BY [comment]
票数 0
EN

Stack Overflow用户

发布于 2012-04-06 07:53:02

在SQL Server中,您可以按查询中的列号排序,就像在order by 1 more info here http://blog.sqlauthority.com/2010/12/27/sql-server-order-by-columnname-vs-order-by-columnnumber/中一样

代码语言:javascript
复制
SELECT *
FROM   (SELECT ISNULL((SELECT COUNT("order")
                      FROM   order_comment
                   WHERE  "order" = "order"."id"
                   GROUP  BY "order"), 0)                 AS [comment],
           Row_number() OVER (ORDER BY "order"."id" DESC) AS [rownum]
    FROM   [order]
    WHERE  ISNULL((SELECT COUNT("order")
                   FROM   order_comment
                   WHERE  "order" = "order"."id"
                   GROUP  BY "order"), 0) > 0) AS [filter]
WHERE  [rownum] BETWEEN 0 AND 10
 ORDER BY 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10037245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档