Sql 按行重复顺序排列查询结果,无连接

Sql 按行重复顺序排列查询结果,无连接,sql,database,oracle,Sql,Database,Oracle,因此,基本上,我想按给定列具有值的次数对查询进行排序。我通过与另一个计算重复次数的查询进行连接来实现这一点,但我希望避免使用另一个扩展查询。我在想也许会有一些关于秩序的把戏,这就是我想要的 注意:我正在处理的查询非常庞大,并且充满了公司信息,因此我将编写一个示例查询来说明我的问题 使用 SELECT user1, rev1, user2, rev2, userCount FROM someTable, (SELECT user2, count(*) userCount FROM

因此,基本上,我想按给定列具有值的次数对查询进行排序。我通过与另一个计算重复次数的查询进行连接来实现这一点,但我希望避免使用另一个扩展查询。我在想也许会有一些关于秩序的把戏,这就是我想要的

注意:我正在处理的查询非常庞大,并且充满了公司信息,因此我将编写一个示例查询来说明我的问题

使用

SELECT user1, rev1, user2, rev2, userCount
FROM someTable,
    (SELECT user2, count(*) userCount
     FROM someTable
     WHERE something1 = something2) counts
WHERE something1 = something2
AND counts.user2 = someTable.user2
ORDER BY userCount DESC
我得到了正确的结果,所以我尝试了

SELECT user1, rev1, user2, rev2 
FROM someTable
WHERE something1 = something2
ORDER BY COUNT(user2) DESC
但这并没有产生我想要的结果

有什么SQL技巧可以帮我解决这个问题吗


谢谢

您的查询不起作用,因为您使用的是
count()
,而没有相应的
分组依据。这毫无意义,因为您没有聚合查询

执行您想要执行的操作的一个好方法是使用分析函数:

SELECT user1, rev1, user2, rev2 
FROM (select t.*,
             COUNT(*) over (partition by user2) as numuser2
      from someTable
      WHERE something1 = something2
     ) t
ORDER BY numuser2 desc, user2
count(*)over
语法将对每个
user2
值的行进行计数,并将其附加到行中

顺便说一下,我还将
user2
添加到了
orderby
。这样,如果某些值具有相同的计数,它们仍将被分隔

SELECT user1, rev1, user2, rev2, COUNT(*) OVER (PARTITION BY user2) as c
FROM someTable
WHERE something1 = something2
ORDER BY c DESC

编辑:从30秒开始被戈登打败!!)

如果可以获得更快的性能,那么使用扩展查询并不一定是坏事。话虽如此,很难说您不想使用第一个查询的原因是什么。您是否遇到性能问题?如果是这样,那么表使用的索引将有所帮助


无论如何,第一个查询中的嵌套查询似乎缺少“GROUPBY”子句。“something1=something2”在性能或结果方面可能意味着不同的事情。因此,如果你能举一个更具体的例子,那会很有帮助。

我不完全理解这些例子,那么这就接近了吗<代码>从something1=something2按用户分组的something2表格中选择user1、rev1、rev2、COUNT(user2)
。如果这不正确,请发布示例
someTable
行和预期输出-我相信有人可以提供帮助。是否还希望显示
计数
?如果是这样,您需要将其放入
SELECT
部分。另外,您的第二个
ORDER BY
中没有
DESC
,因此您可能希望您的结果以这种方式排序。由于出现错误,我无法在第二个上写入DESC。我得到了
ORA-00937:没有一个组函数
。我马上就要试试戈登的建议。我想把我的问题精简一下,我想这可能会减少一半的时间。这看起来更优雅,这正是我所需要的。有没有办法让它只给我前10个不同的?这对我不起作用,因为我可能会得到超过1行匹配C值的数据(这就是我想要的)。我想得到前10个user2,然后返回所有与user2相同的结果,你需要一个子查询,这样可以吗?它会保持计数(user2)的速度(按user2划分)为c?