2016-11-14 40 views
0

對不起,奇怪的標題我很難將問題轉化爲文字 但這是我面臨的問題。所以這是我的表如果在顯示cookieID並顯示它屬於bakkerID時獲得最大值,則顯示爲

bakkery

BakkerID | CookieID 
---------+---------- 
    6534  1009 
    6534  1009 
    6534   50 
    1327   5 
    1327   8 
    1327   8 

,我試圖讓這個結果

bakkerID cookieID total 
------------------------- 
6534  1009  2 
1327   8  2 

所以我想算cookieID,並得到最大值,同時還堅持到cookieIDbakkerID。但我只想要最大的結果。

我通過一個子查詢嘗試過這種類似這樣的

SELECT 
    MAX(cookie_count) AS total, 
    bakkerId, cookieID 
FROM 
    (SELECT 
     COUNT(cookieID) AS cookie_count, 
     bakkerId, cookieID 
    FROM 
     bakkery 
    GROUP BY 
     bakkerID, cookieID) AS cookie_counter_table 
GROUP BY 
    bakkerID, cookieID 

但結果將是

bakkerID cookieID total 
----------------------- 
6534  1009  2 
6534   50  1 
1327   8  2 
1327   5  1 

現在,這並不由因爲該組的工作,但我也不能離開它否則,我會得到一個錯誤,它不在一個組中。我嘗試使用的地方或有,但我可以導致重複bakkerID,我不想要。所以我的問題是:我該如何阻止顯示出來的最大結果,或者我是否全都做錯了?

回答

0

一種方法是使用row_number()和有條件聚集:

SELECT bakkerId, MAX(cookie_count), 
     MAX(CASE WHEN seqnum = 1 THEN cookieID END) as max_cookieId 
FROM (SELECT bakkerId, cookieID, COUNT(*) AS cookie_count, 
      ROW_NUMBER() OVER (PARTITION BY bakkerId ORDER BY COUNT(*) DESC) as seqnum 
     FROM bakkery 
     GROUP BY bakkerID, cookieID 
    ) bc 
GROUP BY bakkerId; 
+0

由於這是回答我的問題。不知道它是如何工作的,但現在讓我知道。 –

0

您可以使用下面的代碼:

SELECT BakkerID, 
     MaxCookieID CookieID, 
     SUM(CASE WHEN MaxCookieID = CookieID THEN 1 ELSE 0 END) total 
FROM ( SELECT *, 
       MAX(CookieID) OVER(PARTITION BY BakkerID) MaxCookieID 
     FROM dbo.bakkery) b 
GROUP BY BakkerID, 
     MaxCookieID; 
0

你可以試試這個:

select BakkerID,CookieID,total from 
          (
           SELECT COUNT(*) OVER (partition by bakkerid,cookieId) AS total, 
           ROW_NUMBER() over(partition by bakkerid order by cookieId desc) as rn, 
           bakkerId, 
           cookieID 
           FROM bakkery 
               ) x 
where x.rn=1 
order by BakkerID desc 
相關問題