在Report Builder 3.0上,我检索了一些项目并使用Count聚合对它们进行了计数。现在我要从最高到最低排序。如何在汇总列上使用ORDER BY函数?下图显示了我要排序的一列,它已被选中。
代码非常简单,如下所示:
SELECT DISTINCT act_id,NameOfAct,
FROM Acts
答案 0 :(得分:0)
我看了看照片。因此,您可能有相同名称的重复行为。而且您想知道具有相同唯一名称的行为的数量。
您可能要按名称对结果进行分组:
GROUP BY NameOfAct
并在查询结果中包含行为名称及其计数:
SELECT NameOfAct, COUNT(*) AS ActCount
(由于act_id列未包含在组中,因此您需要在SELECT中省略它。由于所有组都已经是唯一的,因此DISTINCT也不再是必需的。)
最后,您可以对数据进行排序(可能下降以使具有最高计数的行为排在最前面):
ORDER BY ActCount DESC
您的完整查询将变成这样:
SELECT NameOfAct, COUNT(*) AS ActCount
FROM Acts
GROUP BY NameOfAct
ORDER BY ActCount DESC
编辑:
顺便说一句,您在SELECT子句中使用了字段“ act_id”。这有点令人困惑。如果您想知道计数,则需要查看完整的表数据或将表数据分组为较小的组(使用GROUP BY子句)。然后,您可以使用聚合函数来获取有关这些组(或整个表)的更多信息,例如计数,平均值,最小值,最大值...
如果要对分组数据使用统计/汇总方法,则单记录信息(例如您的行为ID)通常并不重要。假设您的查询返回的行为名称被使用了10次。然后,表中有10条记录,每条记录都有唯一的act_id,但名称相同。
如果您只需要一个代表每个组/行为名称的act_id(并假设act_id是一个自动编号字段),则可以使用MAX聚合函数在查询中包括最新/最大的act_id值:
SELECT NameOfAct, COUNT(*) AS ActCount, MAX(act_id) AS LatestActId
(查询的其余部分保持不变。)
答案 1 :(得分:0)
您的图片指示您还希望在底部Total
行:
SELECT
COALESCE(NameOfAct,'Total') NameOfAct,
COUNT(DISTINCT act_id) c
FROM Acts
GROUP BY ROLLUP(NameOfAct)
ORDER BY
CASE WHEN NameOfAct is null THEN 1 ELSE 0 END,
c DESC;
示例数据的结果:
NameOfAct count
-------------- -------
Act_B 3
Act_A 2
Act_Z 1
Total 6
尝试使用以下示例行:http://sqlfiddle.com/#!18/dbd6c/2