[英]How to get the total count for each distinct category
我想獲得位置的非重復行,並獲得特定氏族的玩家總數以及明星玩家的總數。 請參閱下面的更多解釋
table p:
player_id stars
1 10
2 10
3 10
4 10
table a:
player_id location clan
1 egate dragons
2 ngate sabrelights
3 sgate dragons
4 wgate tigers
5 lgate fireflies
6 lgate fireflies
7 egate dragons
這是我嘗試過的
SELECT DISTINCT (CASE SUBSTR (location, 1, 1)
WHEN 'e' THEN 'East'
WHEN 'n' THEN 'North'
WHEN 's' THEN 'South'
WHEN 'w' THEN 'West'
WHEN 'l' THEN 'Limbo'
ELSE null
END) loc
,clan clans
, sum (case when a.player_id IS NOT NULL THEN 1 ELSE 0 END) Total
,sum (case when p.stars = '10' THEN 1 ELSE 0 END) stars
FROM a
left outer join p on p.PLAYER_ID = a.player_id
group by SUBSTR (location, 1, 1),a.clan, p.STARS
,clan
order by loc, clans
實際結果(錯誤):
LOC CLANS TOTAL STARS
East dragons 1 0
East dragons 1 1
South dragons 1 1
Limbo fireflies 2 0
North sabrelights 1 1
West tigers 1 1
我想要什么(所需的輸出):
LOC CLANS TOTAL STARS
East dragons 2 1
South dragons 1 1
Limbo fireflies 2 0
North sabrelights 1 1
West tigers 1 1
從 GROUP BY 子句中刪除p.stars
它使事情陷入困境,因為它正在為您的分組建立另一個不必要的細分。 它只出現在一個聚合 (SUM) 函數中,因此它不必出現在 group by 中,並且sum case when p.stars
正確地計算玩家是否為明星sum case when p.stars
,您的sum case when p.stars
如果您想更好地了解這導致問題的原因,請將 p.stars 放回 group by 並作為 select 中的一列 - 您將看到分組鍵(不是聚合函數的列),它應該很明顯為什么它會導致出現分割行
如果星星是玩家贏得的星星數的整數計數,您可能希望將其設置為>= 10
檢查 - 這比等檢查更強大,以防萬一它變得更高(除非 11+ 顆星意味着球員不再是明星球員..)。 此外,如果列是 int 則應與常量 int 而不是常量字符串( 10 rather than '10'
)進行比較
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.