php – 如何使sql查询按日期对结果进行分组和求和?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何使sql查询按日期对结果进行分组和求和?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2429字,纯文字阅读大概需要4分钟。
内容图文
![php – 如何使sql查询按日期对结果进行分组和求和?](/upload/InfoBanner/zyjiaocheng/893/a6403049828b4e3ab16017dec36fc336.jpg)
在yii2应用程序中,我有付款模型,字段ID(主键),u_id(整数,表示从用户模型进行此付款的人的ID),总和(整数)和日期.例:
+--------------------------------+
| Payment |
+--------------------------------+
| id | u_id | sum | date |
+--------------------------------+
| 1 | 1 | 400 | 2015-11-25 |
| 2 | 1 | 200 | 2015-11-25 |
| 3 | 2 | 500 | 2015-11-25 |
| 4 | 2 | 300 | 2015-11-25 |
| 5 | 1 | 100 | 2015-11-20 |
+--------------------------------+
问:我想按日期对结果进行分组,并为每天的每个u_id汇总所有行的总和字段,并显示总行数.怎么做…?也许没有总排?在yii2或干净的mysql.结果示例:
+-------------------------------------+
| Date | User id | Money, $ |
+-------------------------------------+
| 2015-11-25 | | 1400 (total) |
| 2015-11-25 | 1 | 600 |
| 2015-11-25 | 2 | 800 |
| 2015-11-20 | | 100 (total) |
| 2015-11-20 | 1 | 100 |
+-------------------------------------+
付款方式:
public function search($params)
{
$query = Payment::find();
// do we need to group and sum here?
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
return $dataProvider;
}
我想ListView会比GridView更容易,因为我们将能够为每个结果进行一些计算.视图:
<table>
<thead>
<tr>
<th>Date</th>
<th>User id</th>
<th>Money, $</th>
</tr>
</thead>
<tbody>
<?= ListView::widget([
'dataProvider' => $dataProvider,
'itemView' => '_item_view',
]) ?>
</tbody>
</table>
_item_view:
<tr>
<td><?= $model->date ?></td>
<td><?= $model->u_id ?></td>
<td><?= $model->sum ?></td>
</tr>
解决方法:
试试这种方式:
select dt "Date", usr "User Id",
case when usr is null
then concat(money, ' (total)')
else money
end as "Money, $"
from (
select dt, null as usr, sum(vsum) as money
from mytable
group by dt
union
select dt, u_id, sum(vsum) as money
from mytable
group by dt, u_id
) a
order by dt desc, coalesce(usr,0)
在这里看到:
http://sqlfiddle.com/#!9/48102/6
你可以在普通的MySql中使用分析函数,但由于MySql不支持它,你必须模拟它.
在我的解决方案中,我提出了一个只按日期汇总钱的查询
select dt, null as usr, sum(vsum) as money
from mytable
group by dt
需要null作为usr列,因此我可以将UNION运算符与第二部分一起使用.此查询将汇总所有日期和金额.
然后是第二部分
select dt, u_id, sum(vsum) as money
from mytable
group by dt, u_id
Wich将通过用户总结钱来获取所有日期.
第三部分是使它成为子查询,所以我可以按日期,用户订购它.请记住,第一部分的用户是null,所以我这样做,所以每当null变为0,所以它将首先显示.
内容总结
以上是互联网集市为您收集整理的php – 如何使sql查询按日期对结果进行分组和求和?全部内容,希望文章能够帮你解决php – 如何使sql查询按日期对结果进行分组和求和?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。