簡體   English   中英

如何在 SQL 服務器中使用隨機聚合 function 進行分組?

[英]How do I do a group by with a random aggregation function in SQL Server?

我有以下 SQL:

select Username, 
    COUNT(DISTINCT Message) as "Count", 
    AVG(WordCount) as "Average",
    RAND(Message) //Essentially what I want to do 
from Messages
group by Username
order by "Count" desc

我作為列的兩個聚合函數是計數和平均,這是顯而易見的。 我想要做的是還從“消息”列的每個分組中返回一個隨機行。

我在 Linq2SQL 中編寫了這個查詢,但是它不支持隨機數。

我想我需要創建一個自定義聚合 function 但它們看起來很誇張,我想知道在嘗試之前是否有更簡單的方法。 我會嘗試 CLR 聚合 function,但是由於它們的 dll 特性,數據庫在實例之間不會那么容易移植。

我也知道在 SQL 中使用每行隨機數也有點冗長,但我找不到通過查詢在我的組中使用它們的方法。

我在這里看到了 Marc Gravell 對隨機行的想法:從 Linq 到 Sql的隨機行,但是他的解決方案會引入我不想做的每一行; 只有分組(小幾個數量級。)

select Username, 
    COUNT(DISTINCT m.Message) as "Count", 
    AVG(m.WordCount) as "Average",
    FOO.Message
from
    Messages m
    cross apply
    (select TOP 1 Message, Username
       from Messages m2 
       WHERE m2.Username = m.Username
       order by newid()
    ) FOO
group by m.Username, FOO.Message
order by "Count" desc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM