1

これは、テーブルのproductテーブルLEFT JOINで使用しているクエリで、列は..非常に簡単です。pageONproductidpageidproduct

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`

関連する 2 つの例のテーブル:

**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

上のコード例に 2 つのテーブルが追加されました。グループ化されたproduct10 個以上の数が必要ですpageday

4

3 に答える 3

1

それは、あなたが節で離れ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`
于 2013-07-10T14:11:18.073 に答える
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`

同僚のダニエル・フェルスティーグの友人に感謝

于 2013-07-11T13:17:15.237 に答える
1

価値もありませんGROUP BYし、オンにすることもできますidORDER BYday

は、標準 SQL 内または を使用している場合には使用dayできないことに注意してください。MySQL では拡張として許可されていますが、誤解を招く可能性がありますGROUP BYsql_mode"only_full_group_by"

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`;
于 2013-07-10T14:11:57.290 に答える