SQL添加多个“;计数“;在一起
我尝试将计数相加,并输出具有最大计数的一个 问题是:展示奖牌最多的人(金牌排名=1,银牌排名=2,铜牌排名=3) 将所有奖牌相加,显示奖牌最多的人 下面是我考虑过的代码(显然不起作用) 有什么想法吗SQL添加多个“;计数“;在一起,sql,Sql,我尝试将计数相加,并输出具有最大计数的一个 问题是:展示奖牌最多的人(金牌排名=1,银牌排名=2,铜牌排名=3) 将所有奖牌相加,显示奖牌最多的人 下面是我考虑过的代码(显然不起作用) 有什么想法吗 Select cm.Givenname, cm.Familyname, count(*) FROM Competitors cm JOIN Results re ON cm.competitornum = re.competitornum WHERE re.place between '1' and
Select cm.Givenname, cm.Familyname, count(*)
FROM Competitors cm JOIN Results re ON cm.competitornum = re.competitornum
WHERE re.place between '1' and '3'
group by cm.Givenname, cm.Familyname
having max (count(re.place = 1) + count(re.place = 2) + count(re.place = 3))
抱歉,忘记添加不允许使用ORDER BY的内容
表中的一些数据
竞争对手表
Competitornum GivenName Familyname gender Dateofbirth Countrycode
219153 Imri Daniel Male 1988-02-02 Aus
结果表
Eventid Competitornum Place Lane Elapsedtime
SWM111 219153 1 2 20 02
从你描述的情况来看,听起来你只需要在奖牌总数中选出“最优秀”的个人。为了做到这一点,你会写这样的东西
Select top 1 cm.Givenname, cm.Familyname, count(*)
FROM Competitors cm JOIN Results re ON cm.competitornum = re.competitornum
WHERE re.place between '1' and '3'
group by cm.Givenname, cm.Familyname
order by count(*) desc
在不使用order by的情况下,您还有两个其他选项,尽管我对sqlfire可能使用的任何语法特性都进行了润色
您可以确定任何用户的最大奖牌数量,然后只选择拥有该数量的竞争对手。您可以通过将其保存到变量或使用子查询来实现这一点
Select cm.Givenname, cm.Familyname, count(*)
FROM Competitors cm JOIN Results re ON cm.competitornum = re.competitornum
WHERE re.place between '1' and '3'
group by cm.Givenname, cm.Familyname
having count(*) = (
Select max( count(*) )
FROM Competitors cm JOIN Results re ON cm.competitornum = re.competitornum
WHERE re.place between '1' and '3'
group by cm.Givenname, cm.Familyname
)
这里有张便条。第二种方法效率很低,因为我们重新计算父表中每一行的最大奖牌数。如果sqlfire支持它,那么通过提前计算它,将其存储在变量中并在HAVING子句中使用它,您会得到更好的服务。您正在按
re.place
进行分组,这是您想要的吗?您希望根据…?:)获得结果
[编辑]很好,现在已经解决了,你就快到了:)
在这种情况下不需要have,只需向select中添加一个
count(re.EventID)
,并使用max(该列)
对其进行子查询,您使用的是哪个RDBMS系统?是MSSQL服务器吗?呃,这只是一个普通的sql东西。。我正在使用sqlfire.xml文件在sqlfire中运行,并在sql中编写代码在sqlfire中运行和执行,以显示该数据库文件中的输出。。。。。如果这真的有意义的话……我想如果你只是按count(*)desc订购,并选择前1名,你将是金色的。-最好的,Davidsorry我忘了在问题中加上不允许使用Order By.抱歉那不是我想要的。。我想按名称分组。如中所述,“不允许聚合嵌套”sqlfire@Tuzki-也许JW的答案对你更有效?如果没有安装sqlfire进行测试,很难判断它将允许什么。@john Woo的回答给了我一个错误:“选择列表中的表达式无效(不包含在聚合函数或分组依据列表中)