2013-07-10 29 views
1

這個分組SUM(數量)列的查詢我使用的productLEFT JOINpageONproductidpage正在productid ..很簡單。SQL查詢結果集,我需要在今天

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 

現在我的代碼示例中最上面添加了兩個表格。我需要的product數量與day

回答

1

我找到了解決我的查詢:

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` 

感謝我的同事丹尼爾Versteeg

1

分組我認爲這是因爲你的group by子句中留下p.id十個或更多page。試試這個:

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` 
+0

非常接近人的朋友,但我需要10頁或更多頁的數量總和..在你的答案中,結果集包括的產品也少於10頁。 – Theo

+0

感謝您的努力@MaxiWheat和Gordon Linoff – Theo

1

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

注意day不是在標準SQL的GROUP BY或當sql_mode is using "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`; 
+0

非常接近的傢伙(),但我需要的數量總和有10頁或更多頁..在您的答案中,結果集包括少於10頁的產品。 – Theo

+0

@Theo:修正JOIN和COUNT以符合您的要求 – gbn

+0

我的查詢只返回一行'HAVING'同一產品的10頁或更多頁面,您的解決方案可以解決每個產品的一天總計問題。 – Theo