MySQL从按项目分组的表中选择一个用户列表,以小时数降序列出


MySQL select a list of users from a table grouped by projects, listed in descending amount of hours

我有一个时间表表,如下所示:

CREATE TABLE time
    (`id` int, `hours` float(1), `project` varchar(55), `user` varchar(45));
INSERT INTO time
    (`id`, `hours`, `project`, `user`)
VALUES
    (1, '3.5', 'Project A', 'Bob'),
    (2, '1', 'Project A', 'Anne'),
    (3, '2', 'Project B', 'Anne'),
    (4, '6', 'Project B', 'Anne'),
    (5, '2', 'Project C', 'Joe'),
    (6, '9', 'Project C', 'Joe'),
    (7, '1', 'Project C', 'Sam'),
    (8, '22', 'Project A', 'Bob');

我想返回这样的表:

th {background-color:#999999}
td {width:200px}
<table>
<thead>
  <tr>
    <th>Project</th>
    <th>User 1 (most hours)</th>
    <th>User 2 (2nd most hours)</th>
    <th>etc....</th>
  </tr>
</thead>
<tr>
  <td>Project A</td>
  <td>Bob</td>
  <td>Anne</td>
</tr>
<tr>
  <td>Project B</td>
  <td>Anne</td>
  <td>null</td>
</tr>
<tr>
  <td>Project C</td>
  <td>Joe</td>
  <td>Sam</td>
</tr>
</table>

正如它所显示的,我需要按降序列出谁在每个项目上花费的时间最多。我相信我需要从子查询中执行 SELECT,但我似乎无法让它正常工作。

尝试以下查询:

SELECT project, user
FROM time
GROUP BY project, user
ORDER BY SUM(hours) DESC

这将根据问题中的示例数据给出以下结果集:

--------------------
|  project  | user |
--------------------
| Project A | Bob  |
| Project A | Anne |
| Project B | Anne |
| Project C | Joe  |
| Project C | Sam  |
--------------------

请注意,每个用户在每个项目上的总工作时间未列出,因为您没有要求这样做。