SQL 查询 - 数据分组

标签 sql

所以每天早上工作时我们都会召开站立 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/

相关文章:

java - Windows 10 上的错误 : Unable to access jarfile metabase. jar

sql - 什么是索引?非聚集索引可以是非唯一的吗?

sql - 如何在SSIS中动态映射输入和输出列?

sql - 自动递增我的主键 SQL Server 2012

SQL Server更新列比较跨行的值

php - 连接两个表以列出用户的所有对话

sql - 带有流水线的 Oracle 查询 - 性能问题

sql - Oracle - 查询运行速度很慢

mysql - 使用 Mysql 更改链接的一部分

mysql - 为什么 LEFT OUTER JOIN 无法工作?