【问题标题】: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 有可能在不同时期求和。但我会在之后研究这个......

标签: mysql sql sql-order-by


【解决方案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 请求是一项运动!
  • 我当然会努力保持身材!
  • 我将添加平均和统计结果。
猜你喜欢
  • 2020-03-16
  • 2013-12-17
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
相关资源
最近更新 更多