每天计算和汇总不同的值

Posted

技术标签:

【中文标题】每天计算和汇总不同的值【英文标题】:count and sum different values per each day 【发布时间】:2016-11-26 11:31:05 【问题描述】:

每天如何计算不同的值?以及每天的总价值?在一个请求中。

key1 | key2 | tdate | tview
1  | 20161123454647 | 2016-11-23 11:11:11 | view1
2  |  20161123454648 | 2016-11-23 11:11:11 | view2
3  |  20161122454649 |2016-11-22 11:11:11 | view2
4  |  20161122454650 |2016-11-22 11:11:11 | view1
5  |  20161122454653 |2016-11-22 11:11:11 | view2
6  |  20161122454661 |2016-11-22 11:11:11 | view2
7  |  20161121454622 |2016-11-21 11:11:11 | view3
8  |  20161121454679 |2016-11-21 11:11:11 | view1
9  |  20161121454684 |2016-11-21 11:11:11 | view3

我发现每天计算 tview 的所有值的总和:

SELECT DATE(tdate) Date, COUNT(DISTINCT tview) totalOfViews FROM mytable GROUP BY DATE(tdate)

我有一个键 (key2),它连接了日期和渲染的数量,因为我不想在同一天配置两个相同的渲染。

当我使用“INSERT ON DUPLICATE key2 UPDATE”插入新渲染时,这对我来说是最容易的。我只更新一个请求的视图数。我不知道'INSET ON DUPLICATE' 更新:newview。也很有趣的问题;-)

日期是我表中的时间戳

我使用php 7、mysql和PDO做语句。

一个有趣的输出:

day | totaView1 | totalView2 | totalView3 | totalView1+view2 |totalOfViews
2016-11-23 | 1 | 1 | 0 | 2 | 2
2016-11-22 | 1 | 3 | 0 | 4 | 4
2016-11-21 | 1 | 0 | 2 | 1 | 3

在我找到请求的日期范围并比较每天的数字视图的演变之后。示例:

Day (currentmonth) | totaView1 | totalView1 (lastmonth) |totalOfViews

难道“alter table”可以做到这个结果?

【问题讨论】:

请向我们展示您的预期输出,因为目前还不清楚。 我编辑结果 我发现有一个简单的结果。因为在我将计算周期内的平均 poucent 和弹性之后。 ;-) 我希望最有趣 问题已经清楚了,感谢更新。 我在 mysql 中发现使用 alter table 有可能在不同时期求和。但我会在之后研究这个...... 【参考方案1】:

一种可能性是使用条件聚合:

SELECT DATE(tdate) AS day,
       SUM(CASE WHEN tview = 'view1' THEN 1 ELSE 0 END) AS totaView1,
       SUM(CASE WHEN tview = 'view2' THEN 1 ELSE 0 END) AS totaView2,
       SUM(CASE WHEN tview = 'view3' THEN 1 ELSE 0 END) AS totaView3,
       SUM(CASE WHEN tview = 'view1' OR tview = 'view2'
                THEN 1 ELSE 0 END) AS totaView1Or2,
       COUNT(*) AS totalOfViews
FROM mytable
GROUP BY DATE(tdate)

【讨论】:

谢谢!!我们也可以用它来选择时期吗?本月 WHERE tdate BETWEEN DATE_ADD(NOW( ) , INTERVAL -1 MONTH ) AND NOW( ) 和上个月? WHERE tdate BETWEEN DATE_ADD(NOW() , INTERVAL -2 MONTH ) AND DATE_ADD(NOW() , INTERVAL -1 MONTH ) @julux 是的,您可以将此条件添加到WHERE 子句中。 谢谢。 SQL 请求是一项运动! 我当然会努力保持身材! 我将添加平均和统计结果。

以上是关于每天计算和汇总不同的值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:每天计算不同的行

中位数的中位数 - 这是可能的还是有不同的方法

使用数据块计算过去 7 天每天的不同用户

使用 Django ORM 计算不同时区每天的事件类型

当通过R中的不同变量进行分组和汇总时,计算分类变量的出现次数

sumif和countif的区别