0

我有以下准备好的语句,它返回为特定类别找到的行:

if ($stmt = $mysqli->prepare("SELECT Work,Amount from work_times where Category=?")) {
    $stmt->bind_param("s", $category);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($work,$amount);

    while ($stmt->fetch()) {
    echo $work.": &pound;".$amount." each<br>";
    }

我想做的是调整它以按“工作”列和“金额”列对行进行分组,为每个组返回一行,每个行/组都有一个 SUM 和计数,以便我可以输出像这样的东西:

5次咨询会议,每次50英镑:250 英镑

2013 年 2 月 1 日 2013 年2 月
8 日 2013年 2 月
15 日 2013年 2 月
22 日 2013 年
3 月 1 日

3次治疗,每次40英镑:120 英镑

2013 年 2月 2 日 2013 年 2 月
9 日 2013年 2 月
16 日

2 次治疗,每次20英镑:40 英镑

2013 年 2 月3 日 2013 年 2 月
10 日

其中每行中的粗体文本对应于:组中的行数、金额(对于每个会话)和组中每行的金额值的总和。我希望这很清楚!

我不确定如何调整上面的陈述来实现这一点。

以上将是下表的结果:

ID | Work                | Amount

1  | Therapy Session     | £40     | 2013-02-02
2  | Consultancy Session | £50     | 2013-02-01
3  | Therapy Session     | £20     | 2013-02-03
4  | Consultancy Session | £50     | 2013-02-08
5  | Consultancy Session | £50     | 2013-02-15
6  | Therapy Session     | £40     | 2013-02-09
7  | Consultancy Session | £50     | 2013-02-22
8  | Therapy Session     | £40     | 2013-02-16
9  | Therapy Session     | £20     | 2013-02-10
10 | Consultancy Session | £50     | 2013-03-01

按行数对组进行排序,如上面的输出所示,理想情况下是我正在寻找的。

4

1 回答 1

1

这应该有效:

SELECT `Work`, COUNT(*) AS sessions, SUM(`Amount`) AS Total
FROM work_times
GROUP BY `Work`, `Amount`

结果

| 工作 | 会议 | 总计 |
------------------------------------------
| 顾问会议 | 5 | 250 |
| 治疗会议 | 2 | 40 |
| 治疗会议 | 3 | 120 |

查看演示

于 2013-02-21T15:55:52.773 回答