0

fbpost と fbalbum という 2 つのテーブルがあり、それぞれに というDATETIME列がありますcreatedTime。月ごとのアルバム数と月ごとの投稿数を求めて、それらを足し合わせています。

これが私のクエリです(説明どおりに機能します):

SELECT  createdTime, itemCount FROM 
        (SELECT DATE_FORMAT(createdTime, '%m-%Y') AS createdTime, COUNT(*) AS itemCount FROM fbpost WHERE page_id =2 
        GROUP BY YEAR(createdTime), MONTH(createdTime)
        UNION ALL
        SELECT DATE_FORMAT(createdTime, '%m-%Y') AS createdTime, COUNT(*) AS itemCount FROM fbalbum WHERE page_id=2
        GROUP BY YEAR(createdTime), MONTH(createdTime)) AS foo
GROUP BY createdTime

これにより、次の結果が得られます。

01-2009 | 173
01-2010 | 21
01-2011 | 521
01-2012 | 776
02-2009 | 117
02-2010 | 158
02-2011 | 678
...

しかし、結果を次のように並べたいと思います。

01-2009 | 173
02-2009 | 56
03-2009 | 543
04-2009 | 211
05-2009 | 723
06-2009 | 55
07-2009 | 521
...

どうすればこれを達成できますか?

注: DATE_FORMAT()ではなく文字列を指定するDATETIMEため、日付で並べ替えることはできません。DATE_FORMAT()しかし、ネストされた 2 つの select ステートメントを取り出すと、ほとんどの月で 2 つの行が得られます。ネストされた select ごとに 1 か月に 1 行しかありませんが、月の最後の項目は任意の日になる可能性があるため、通常は日が異なります。

4

1 に答える 1

1

DATE_FORMAT外側のクエリまで使用しないでください:

SELECT DATE_FORMAT(a.createdTime, '%m-%Y') AS createdTime, SUM(a.itemCount) AS itemCount
FROM
    (SELECT DATE(createdTime) AS createdTime, COUNT(*) AS itemCount 
    FROM fbpost WHERE page_id = 2
    GROUP BY DATE(createdTime)
    UNION ALL
    SELECT DATE(createdTime) AS createdTime, COUNT(*) AS itemCount
    FROM fbalbum WHERE page_id = 2
    GROUP BY DATE(createdTime)) a
GROUP BY YEAR(a.createdTime), MONTH(a.createdTime)

実際に見てみる*

デモはありませんpage_id

于 2012-10-15T23:14:38.750 に答える