所以每天早上工作时我们都会召开站立 session 。我们将手边最近的物体扔到房间周围,作为决定谁按什么顺序发言的方法。有点奇怪的是,我认为获取有关这些 throw 的一些数据可能会很有趣。所以,每天早上我都会记住 throw 的顺序(以及其他相关的事情,比如谁丢了球/奇怪的海绵物体,它可能也曾经是一个球,以及谁把球扔给了已经或刚刚投过一次残暴投球的人) ,并将这些数据记录在表中:
+---------+-----+------------+----------+---------+----------+--------+--------------+
| throwid | day | date | thrownum | thrower | receiver | caught | correctthrow |
+---------+-----+------------+----------+---------+----------+--------+--------------+
| 1 | 1 | 10/01/2012 | 1 | dan | steve | 1 | 1 |
| 2 | 1 | 10/01/2012 | 2 | steve | alice | 1 | 1 |
| 3 | 1 | 10/01/2012 | 3 | alice | matt | 1 | 1 |
| 4 | 1 | 10/01/2012 | 4 | matt | justin | 1 | 1 |
| 5 | 1 | 10/01/2012 | 5 | justin | arif | 1 | 1 |
| 6 | 1 | 10/01/2012 | 6 | arif | pete | 1 | 1 |
| 7 | 1 | 10/01/2012 | 7 | pete | greg | 0 | 1 |
| 8 | 1 | 10/01/2012 | 8 | greg | alan | 1 | 1 |
| 9 | 1 | 10/01/2012 | 9 | alan | david | 1 | 1 |
| 10 | 1 | 10/01/2012 | 10 | david | dan | 1 | 1 |
| 11 | 2 | 11/01/2012 | 1 | dan | david | 1 | 1 |
| 12 | 2 | 11/01/2012 | 2 | david | alice | 1 | 1 |
| 13 | 2 | 11/01/2012 | 3 | alice | steve | 1 | 1 |
| 14 | 2 | 11/01/2012 | 4 | steve | arif | 1 | 1 |
| 15 | 2 | 11/01/2012 | 5 | arif | pete | 0 | 1 |
| 16 | 2 | 11/01/2012 | 6 | pete | justin | 1 | 1 |
| 17 | 2 | 11/01/2012 | 7 | justin | alan | 1 | 1 |
| 18 | 2 | 11/01/2012 | 8 | alan | dan | 1 | 1 |
| 19 | 2 | 11/01/2012 | 9 | dan | greg | 1 | 1 |
+---------+-----+------------+----------+---------+----------+--------+--------------+
我现在已经获得了相当多天的数据,并且我开始出于自己的目的对其运行一些查询(我还没有告诉团队的其他成员......不会'不喜欢影响结果)。我已经完成了一些工作,没有出现任何问题,但我一直在努力获得特定的结果。
我要查找的是每个人成为最后一个 catch 的团队成员的次数。现在,正如您在表格中看到的那样,由于缺席等原因,每天的 throw 次数并不总是恒定的,因此我不能简单地通过 throwum 选择接收者。
对于上述数据,它将返回:
+--------+-------------------+
| person | LastReceiverTotal |
+--------+-------------------+
| dan | 1 |
| greg | 1 |
+--------+-------------------+
到目前为止我已经做到了:
SELECT MAX(thrownum) AS LastThrowNum, day FROM Throws GROUP BY day
现在,这会返回一些有用的数据。我每天都获得最高的 throw 量。看起来我需要做的就是获取该值的接收器,然后获取按接收器分组的计数以获得我的答案。但这不起作用,因为由于上述查询使用聚合函数,结果集并不像看起来那样。
老实说,我怀疑有更好的方法来设计表来存储数据,但同样,我也确信有一种方法可以按原样使用表获取这些信息 - 某种内部查询?我不知道它是如何工作的。任何人都可以阐明如何做到这一点吗?
最佳答案
您的查询为您提供了每天最大的 Throwum。
这样,您只需与表进行内部连接并获取接收者和他出现的次数。
select t.receiver as person, count(t.day) as LastReceiverTotal from Throws t
inner join (SELECT MAX(thrownum) AS LastThrowNum, day FROM Throws GROUP BY day) a on a.LastThrowNum = t.thrownum and a.day = t.day
group by t.receiver
关于SQL 查询 - 数据分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9191786/