在MySQL查询中使用分组值而不是表值

时间:2013-12-10 16:27:22

标签: mysql sql

我需要按日期对一些数据进行分组,但我有一个非常特殊的情况,即最终字段的名称应该与原始字段的名称相同,我不能在GROUP BY <中使用表达式/ p>

我用一些示例数据创建了这个sqlfiddle:

http://sqlfiddle.com/#!2/8771a/1

我需要这个结果:

DATE    PAGEVIEWS
2013-12 69
2013-11 70

注意1 :我无法更改群组,如果我这样做,我会得到结果,但我需要按date分组,而日期应该是格式化的日期,而不是表格中的真实日期:

SELECT DATE_FORMAT(`date`, "%Y-%m") AS `date`, SUM(pageviews) AS pageviews
FROM `domains_data`
GROUP BY DATE_FORMAT(`date`, "%Y-%m")
ORDER BY `date` DESC

注2 :我无法重命名该字段,最后应该有“日期”名称,这对我来说是不可能的:

SELECT DATE_FORMAT(`date`, "%Y-%m") AS `date2`, SUM(pageviews) AS pageviews
FROM `domains_data`
GROUP BY `date2`
ORDER BY `date` DESC

有一些方法可以用MySQL吗?

2 个答案:

答案 0 :(得分:2)

是否允许使用嵌套查询?

SELECT `date`, SUM(pageviews) AS pageviews FROM
(SELECT DATE_FORMAT(`date`, "%Y-%m") AS `date`, SUM(pageviews) AS pageviews
    FROM `domains_data`
    GROUP BY `date`) AS Ref
GROUP BY `date`
ORDER BY `date` DESC

答案 1 :(得分:2)

如果您可以更改from子句:

SELECT `date`, SUM(pageviews) AS pageviews
FROM (select  DATE_FORMAT(`date`, "%Y-%m") AS `date`, pageviews
      from `domains_data` dd
     ) dd
GROUP BY `date`
ORDER BY `date` DESC;

但是,考虑到您无法更改group by的限制,您可能无法更改from。你能解释为什么你的查询有这些限制吗?