Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


3.6.8 日ごとの訪問数の計算

ビットグループ関数を使用して、あるユーザーが Web ページを訪問した月ごとの日数を計算する方法の例を次に示します。

CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL,
             day INT(2) UNSIGNED ZEROFILL);
INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),
            (2000,2,23),(2000,2,23);

このテーブルには、ユーザーがページを訪問した日付を表す年月日の値が格納されています。月ごとの訪問日数を取得するには、次のクエリーを実行します。

SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1
       GROUP BY year,month;

次の結果が表示されます。

+------+-------+------+
| year | month | days |
+------+-------+------+
| 2000 |    01 |    3 |
| 2000 |    02 |    2 |
+------+-------+------+

このクエリーでは、年と月の組み合わせに対して異なる日付が何回テーブルに出現するかを、自動的に重複エントリを除去することによって計算しています。


User Comments
  Posted by on May 17, 2005
It seems to me that it would be much simpler and intuitive to use something like this to query the days per month:

SELECT year, month, COUNT(DISTINCT day) AS days FROM t1 GROUP BY year,month;

  Posted by Anders Henke on December 19, 2005
Note that this example is not suitable for large-scale processing of weblogs ... it's missing indexes and usually one might use an aggregated counter if aggregated values are goal of the statistics.
Sign Up Login You must be logged in to post a comment.