SQL:按两个列分组并求和

时间:2018-07-29 21:44:20

标签: mysql sql database

我试图对“费用”列进行汇总,然后按类型和日期列进行分组。这应该很简单,但是在我应用求和汇总并尝试按两列分组之后,我最终得到的结果要么太少,要么结果很多,每种情况下总和都是错误的。

如果我有如下表格:

<table >
	<tbody>
		<tr>
			<td> Date</td>
			<td> Type</td>
			<td> Cost</td>
		</tr>
		<tr>
			<td> Jan 01</td>
			<td> TV</td>
			<td> 20</td>
		</tr>
		<tr>
			<td> Jan 01</td>
			<td> TV</td>
			<td> 25</td>
		</tr>
		<tr>
			<td> Jan 01</td>
			<td>Phone </td>
			<td> 10</td>
		</tr>
		<tr>
			<td> Jan 01</td>
			<td> Phone</td>
			<td> 20</td>
		</tr>
		<tr>
			<td> Jan 02</td>
			<td> TV</td>
			<td> 30</td>
		</tr>
		<tr>
			<td> Jan 02</td>
			<td> Phone</td>
			<td> 80</td>
		</tr>
		<tr>
			<td> Jan 02</td>
			<td> Phone</td>
			<td> 20</td>
		</tr>
		<tr>
			<td> Jan 03</td>
			<td> TV</td>
			<td>20 </td>
		</tr>
		<tr>
			<td> Jan 03</td>
			<td> TV</td>
			<td> 40</td>
		</tr>
		<tr>
			<td> Jan 03</td>
			<td> Other</td>
			<td> 10</td>
		</tr>
	</tbody>
</table>

什么是按功能分组才能获得与以下内容等效的输出?

<table >
	<tbody>
		<tr>
			<td> Date</td>
			<td> Type</td>
			<td> Cost</td>
		</tr>
		<tr>
			<td> Jan 01</td>
			<td> TV</td>
			<td> 45</td>
		</tr>
		<tr>
			<td> Jan 01</td>
			<td>Phone </td>
			<td> 30</td>
		</tr>
		<tr>
			<td> Jan 02</td>
			<td> TV</td>
			<td> 30</td>
		</tr>
		<tr>
			<td> Jan 02</td>
			<td> Phone</td>
			<td> 100</td>
		</tr>
		<tr>
			<td> Jan 03</td>
			<td> TV</td>
			<td>60 </td>
		</tr>
		<tr>
			<td> Jan 03</td>
			<td> Other</td>
			<td> 10</td>
		</tr>
	</tbody>
</table>

我正在尝试对“费用”列进行汇总,但最终结果不正确

*编辑* 可接受的答案是正确的,但是对我来说出了什么问题呢?另外两列需要事先过滤才能获得预期的输出。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用group bysum功能。

使用聚合函数时,需要在group by中添加非聚合列。

SELECT date,type,Sum(Cost)  Cost
FROM T
group by date,type

sqlfiddle

[结果]

|   date |  type | Cost      |
|--------|-------|-----------|
| Jan 01 | Phone |        30 |
| Jan 01 |    TV |        45 |
| Jan 02 | Phone |       100 |
| Jan 02 |    TV |        30 |
| Jan 03 | Other |        10 |
| Jan 03 |    TV |        60 |