所以基本上,我想根据给定列的值有多少次来查询我的查询。我通过与另一个计算重复的查询进行连接来完成此操作,但我想避免使用其他大量查询。我认为可能有一些技巧,顺序就是我想要的。
注意:我正在使用的查询非常庞大且充满了公司信息,因此我将编写一个示例查询来说明我的问题。
使用
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技巧可以解决这个问题?
谢谢!
答案 0 :(得分:3)
您的查询不起作用,因为您使用的count()
没有相应的group by
。它没有意义,因为你没有聚合查询。
做你想做的事情的好方法是使用分析函数:
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
添加了order by
。这样,如果某些值具有相同的计数,它们仍将被分开。
答案 1 :(得分:3)
SELECT user1, rev1, user2, rev2, COUNT(*) OVER (PARTITION BY user2) as c
FROM someTable
WHERE something1 = something2
ORDER BY c DESC
编辑:戈登在30秒内击败!! 。)
答案 2 :(得分:0)
如果您可以获得更快的性能,使用广泛的查询并不一定是邪恶的。话虽如此,很难说出你不想使用第一个查询的原因是什么。您是否遇到性能问题?如果那样,那将有助于你的表使用哪些索引。
无论如何,第一个查询中的嵌套查询似乎缺少“GROUP BY”子句。 “something1 = something2”在性能或结果方面可能意味着不同的东西。因此,如果你能提出更具体的例子,将会有所帮助。