0

我有一个格式如下的数据库:

myTable
productgroupID | productID | views | date
1              | 10        | 25    | 2013-05-23 
4              | 105       | 15    | 2013-05-23 
7              | 60        | 65    | 2013-05-23
7              | 60        | 55    | 2013-05-22
7              | 60        | 45    | 2013-05-21 

现在我想总结一下蛾五月对一个产品的所有看法。结果应该是:

productgroupID | productID | viewed | month
7              | 60        | 165    | 2013-05-01
1              | 10        | 25     | 2013-05-01 
4              | 105       | 15     | 2013-05-01 

我尝试了下面的查询,但这给了我特定 productgroupID 的所有视图。但我需要唯一 productgroupID 和 productID 的总和。

SELECT COUNT( views ) AS viewed, productgroupID FROM product_stats_daily GROUP BY productgroupID

4

3 回答 3

2

如果您想要总计视图,那么您可以使用聚合函数,sum()然后您可以按日期分组:monthyear

select productGroupId,
  productId,
  sum(views) viewed,
  month(date) Month,
  year(date) Year
from myTable
group by productGroupId, productId, month(date), year(date);

请参阅带有演示的 SQL Fiddle

您还可以使用Date_Format以您想要的格式获取日期:

select productGroupId,
  productId,
  sum(views) viewed,
  DATE_FORMAT(date, '%Y-%m-01') date
from myTable
group by productGroupId, productId, DATE_FORMAT(date, '%Y-%m-01')

请参阅带有演示的 SQL Fiddle

于 2013-05-23T14:44:51.393 回答
1

COUNT将计算行数,同时SUM汇总检索到的行的值。

所以你的查询变成:

SELECT SUM( views ) AS viewed, productgroupID
FROM product_stats_daily
GROUP BY productgroupID
于 2013-05-23T14:42:55.733 回答
1

可能有一种更优雅的方式将日期强制为月初,但这应该有效:

SELECT
  ProductGroupID,
  ProductID,
  SUM(views) AS viewed,
  DATE_FORMAT(date, '%Y-%m-01') AS Month
FROM myTable
GROUP BY
  ProductGroupID,
  ProductID,
  DATE_FORMAT(date, '%Y-%m-01')
于 2013-05-23T14:45:10.923 回答