两周前,我开始学习 SQL,到目前为止进展顺利,但我遇到了一个我似乎无法解决的情况。经过两天的网络搜索和看书,我离解决这个问题还差得远,所以有时间寻求帮助。我的部分问题是对 SQL 如此陌生,我不确定要搜索什么。
这是使用 mySQL 和 INNODB。
在一些加入和其他事情之后,我得到了下表,其中包含运动员信息,给出了运动员参加的赛事类型和该赛事的距离。可能的事件/距离组合是 {A10,A15,B10,B15}。
事件表
last_name first_name event distance
Munster Eddie A 10
Brady Marsha A 10
Clampet Jethro B 15
Grumby Jonas A 15
Brady Peter A 10
Brady Marsha A 10
Brady Marsha B 15
Grant Ginger B 15
Munster Eddie B 10
Brady Marsha A 10
作为最后一步,我要做的是将此表转换为显示每个运动员参加每个项目的次数的表格,如以下输出:
last_name first_name A10 A15 B10 B15
Munster Eddie 1 0 1 0
Brady Marsha 3 0 0 1
Clampet Jethro 0 0 0 1
Grumby Jonas 0 1 0 0
Brady Peter 1 0 0 0
Grant Ginger 0 0 0 1
我想我想使用相关子查询,所以我尝试了以下 SQL 查询的多种变体,但它返回“操作数应包含 1 列”,这是有道理的。
SELECT last_name, first_name,
count(if(event='A',1,0) AND if(distance=10,1,0)) AS A10
FROM sample s
WHERE (SELECT last_name, first_name, event, distance
FROM sample s1
WHERE s1.last_name = s.last_name
)
ORDER BY last_name, first_name;
我看到我需要的步骤是:1. 在表中创建一组每个名称,我可以这样做,然后 2. 遍历每个名称,创建一个新的查询选择事件/距离,然后 3. 对该查询求和事件/距离组合;4. 将结果返回到#1。
我看到程序提供了一些循环功能,这是这样做的吗?我想在 SQL 环境中做的事情可能吗?我的下一步是将原始表转储到 PHP 并在那里处理它。
非常感谢任何想法和/或解决方案。