繁体   English   中英

SQL查询结果集,我需要按DAY分组的SUM(数量)COLUMN

[英]SQL query resultset, I need SUM(quantity) COLUMN grouped by DAY

这是我使用的查询productLEFT JOINpageONproductidpage作为idproduct ..很简单。

SELECT 
COUNT(DISTINCT `p`.`id`) as `quantity`,
DATE_FORMAT(`p`.`created_time`,'%Y-%m-%d') AS `day`
FROM
`product` AS `p` 
LEFT JOIN
`page` AS `pg` ON `p`.`id` = `pg`.`productid` 
WHERE
`p`.`created_time` BETWEEN '2013-07-03 00:00:00' AND '2013-07-10 23:59:59'
AND
`p`.`group` = '101' 
GROUP BY `day`, `p`.`id` HAVING COUNT(`pg`.`productid`)>=10 
ORDER BY `p`.`created_time`

两个示例表涉及:

**product**
id  created_time
32  2013-07-09
33  2013-07-09

**page**
id  productid
1   33
2   33
..  ..
20  33
21  32
22  32
..  ..
54  32

现在我的结果集如下所示:

quantity    day
1           2013-07-09
1           2013-07-09
1           2013-07-10

但我希望以下输出没有UNION并且不使用temp表:

quantity    day
2           2013-07-09
1           2013-07-10

现在,我的代码示例中添加了两个表。 我需要按day分组的十个或更多pageproduct数量

我认为这是因为你将p.id留在group by子句中。 尝试这个:

SELECT COUNT(DISTINCT `p`.`id`) as `quantity`,
       DATE_FORMAT(`p`.`created_time`,'%Y-%m-%d') AS `day`
FROM `product` AS `p` LEFT JOIN
     `page` AS `pg`
      ON `p`.`id` = `pg`.`productid` 
WHERE `p`.`created_time` BETWEEN '2013-07-03 00:00:00' AND '2013-07-10 23:59:59'
      AND `p`.`group` = '101' 
GROUP BY `day`
HAVING COUNT(`pg`.`productid`)>=10 
ORDER BY `p`.`created_time`

不要GROUP BYid值和ORDER BY也可以在day

需要注意的是day不可用在GROUP BY标准SQL或时sql_mode使用"only_full_group_by" MySQL允许它作为扩展,但它具有误导性

SELECT 
    COUNT(*) as `quantity`,
    DATE_FORMAT(`p`.`created_time`,'%Y-%m-%d') AS `day`
FROM
   `product` AS `p` 
   JOIN
   `page` AS `pg` ON `p`.`id` = `pg`.`productid` 
WHERE
   `p`.`created_time` BETWEEN '2013-07-03 00:00:00' AND '2013-07-10 23:59:59'
   AND
   `p`.`group` = '101' 
GROUP BY
   `pg`.`productid`, DATE_FORMAT(`p`.`created_time`,'%Y-%m-%d') AS `day`
HAVING
   COUNT(*) >= 10 
ORDER BY
   `day`;

我找到了我的查询的解决方案:

SELECT
COUNT(`p`.`id`) as `quantity`,
DATE_FORMAT(`p`.`created_time`,'%Y-%m-%d') AS `day`
FROM
`product` AS `p`
INNER JOIN 
(
SELECT 
    `productid` AS `id`,
    count(id) AS pagesNR 
FROM 
    `page`
GROUP BY 
    `productid` HAVING COUNT(`id`) >= 10
)
AS 
`pg` USING (`id`)
WHERE
    `p`.`created_time` BETWEEN '2013-07-03 00:00:00' AND '2013-07-10 23:59:59'
AND
    `p`.`group` = '101'
GROUP BY 
    `day`
ORDER BY 
    `created_time`

感谢我的同事DaniëlVersteeg的朋友

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM