會是怎樣的最有效的方式,可以使用連接在DB2表計算模式..計算模式 - 「最高頻率行」 DB2
我想獲得最頻(計數)值給定日期的給定列(ID - 連接表的候選鍵)。
這個想法是從表中獲得最常見的(值),對於某些賬戶(對於相同的ID和日期)具有不同的(值)。我們需要使其在另一個表格中獨一無二。
會是怎樣的最有效的方式,可以使用連接在DB2表計算模式..計算模式 - 「最高頻率行」 DB2
我想獲得最頻(計數)值給定日期的給定列(ID - 連接表的候選鍵)。
這個想法是從表中獲得最常見的(值),對於某些賬戶(對於相同的ID和日期)具有不同的(值)。我們需要使其在另一個表格中獨一無二。
您可以使用通用表表達式[CTE's](由WITH
指示)將邏輯分解爲邏輯步驟。首先我們將構建彙總行,然後我們將爲每個組內的行分配一個排名,然後挑選出記錄數最多的行。
比方說,我們想知道每個項目的哪種口味在每個日期銷售最頻繁(也許假設記錄是第一個量)。
WITH s as
(
SELECT itemID, saleDate, flavor, count(*) as tally
FROM sales
GROUP BY itemID, saleDate, flavor
), r as
(
SELECT itemID, saleDate, flavor, tally,
RANK() OVER (PARTITION BY itemID, saleDate ORDER BY tally desc) as pri
FROM s
)
SELECT itemID, saleDate, flavor, tally
FROM r
WHERE pri = 1
這裏的名稱「s」和「r」是指來自它們各自CTE的結果集。這些名稱可以用來表示語句另一部分中的表格。
pri列將在itemID和saleDate窗口內的第一部分「s」的彙總行上具有TANK值()。 Tally正在下降,因爲我們首先需要最大值,這會得到1的RANK()。然後在主SELECT中,我們只需選擇那些在其分區中第一個的摘要記錄。
通過使用RANK()或DENSE_RANK(),我們可以得到多個口味的itemID,saleDate,如果他們並列第一名。這可以通過用ROW_NUMBER()替換RANK()來消除,但是它會隨意選取其中一個並列的風格作爲勝利者,這可能不是正確答案。
如果我們在表格中有一個銷售數量列,我們可以用SUM(salesqty)替換COUNT(*),並查找出售最多單位的數量。
嘿,謝謝你的回覆,這種解決了問題。是否有辦法打破領帶?如果在等級1中有兩排? – user1521554
謝謝..打開它的工作..查看結果的平均值.. – user1521554
打破領帶可能取決於你的具體情況。如果你能描述你的場景,我*可能會有一些想法。我爲上面的答案彌補的場景有些蹩腳:o) – WarrenT