Sql 如何计算体育奖牌总数

Sql 如何计算体育奖牌总数,sql,Sql,我正在从事学校体育项目。在这里,我有一张桌子:- 结果(状态、点) 对于奖牌,我有以下标准:- 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 但是它只计算积分总数。我还需要金牌、银牌和铜牌的总数。所

我正在从事学校体育项目。在这里,我有一张桌子:- 结果(状态、点)

对于奖牌,我有以下标准:-

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

但是它只计算积分总数。我还需要金牌、银牌和铜牌的总数。所以请帮助我

你可以尝试做一些条件逻辑-我在这里假设你没有其他列,并且数据还没有以任何方式聚合,但是,可能类似于:

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

如果我理解正确,您可以根据表中的分数确定奖牌,然后您可以将结果分组以计算奖牌:

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

这里有一个替代其他策略的方法。假设您的表如下所示:

+-------+--------+
| 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

金、银、铜的价值储存在哪一列?请指定您的数据库引擎,如SQL server、Oracle等。您能告诉我们您的表结构吗?您应该提供数据库/表结构,以及您是否只存储点?例如,要想知道金牌的数量,你必须选择count(*),其中point=7?试着按州分组,奖牌类型,使用count而不是Sum。我想这是一个THEN 1而不是WHEN 1。如果我在窗口应用程序中使用this query来选择存储在excel中的数据,它会显示错误:-错误[42000ׁ][Microsoft][ODBC Excel驱动程序]查询表达式“求和(如果点=7,则为1,否则为0结束)”中出现语法错误(缺少运算符)…请在此帮助我注意:“以上”这里不起作用,因为相同分数的答案是随机排列的。它现在适用于meIt现在适用于meThis根据奖牌数量显示州名,例如考试:-德里奖牌:1个计数:-1,德里梅达:1个计数:1我希望它是:-州,然后是他们的总金牌、总铜牌和总银牌