我正在学校体育项目......我有一张桌子: - 结果(状态,点)
对于奖牌,我有以下标准: -
Gold - 7 Point
Silver- 5 Points
Bronze- 4 Points
我想计算每个州获得的金牌,银牌和铜牌总数。为此,我使用了以下查询:
select STATE,sum(Point) as MEDAL from [Sheet2$] Group by STATE order by sum(Point) desc
但它只计算总分数。我想要金牌,银牌和铜牌的总数。所以请帮帮我
答案 0 :(得分:3)
您可以尝试做一些条件逻辑 - 我假设您没有其他列,并且数据尚未以任何方式聚合,但是,可能类似于:
SELECT STATE,
SUM(Point) AS MEDAL,
SUM(CASE WHEN Point = 7 THEN 1 ELSE 0 END) AS GoldCount,
SUM(CASE WHEN Point = 5 THEN 1 ELSE 0 END) AS SilverCount,
SUM(CASE WHEN Point = 4 THEN 1 ELSE 0 END) AS BronzeCount
FROM [Sheet2$]
GROUP BY STATE
ORDER BY SUM(Point) DESC
答案 1 :(得分:0)
如果我理解正确,你会从表中的点确定奖牌,然后你可以将结果分组来计算奖牌:
select
STATE, Medal, count(*) as [Count]
from
(select
STATE,
case
when Point >= 7 then 'Gold'
when Point >= 5 then 'Silver'
when Point >= 4 then 'Bronze'
else null
end as Medal
from
[Sheet2$]
) x
group by
STATE, Medal
order by
STATE
答案 2 :(得分:0)
这是其他策略的替代方案。假设你的表看起来像这样:
+-------+--------+
| state | points |
+-------+--------+
| IL | 7 |
| ON | 3 |
| ON | 7 |
...
| TX | 7 |
+-------+--------+
然后这样的事情会获得奖牌数:
SELECT
state,
count(*) AS medal
FROM your_table
GROUP BY state, points
ORDER BY state, points desc