無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 11 関数と演算子 :: 11.11 GROUP BY 句との関数および修飾子の使用 :: 11.11.1 GROUP BY ( 集約 ) 関数
« 11.11 GROUP BY 句との関数および修飾子の使用

11.11.2 GROUP BY 修飾子 »
Section Navigation      [Toggle]
  • 11.11 GROUP BY 句との関数および修飾子の使用
  • 11.11.1 GROUP BY ( 集約 ) 関数
  • 11.11.2 GROUP BY 修飾子
  • 11.11.3 非常時フィールドとの GROUP BY および HAVING

11.11.1. GROUP BY ( 集約 ) 関数

このセクションでは、値のセットを演算するグループ ( 集約 ) 関数について説明します。特別に説明されていない限り、グループ関数は NULL 値を無視します。

GROUP BY 句を含まないステートメントでグループ関数を使用する場合、すべての行をグループ分けするのと同様の効果になります。

数値引数では、分散値と標準偏差関数が DOUBLE 値を戻します。SUM() および AVG() 関数は、高精度値引数 ( 整数または DECIMAL ) に対して DECIMAL 値を戻し、近似値引数 ( FLOAT または DOUBLE ) に対してDOUBLE 値を戻します。

SUM() および AVG() 集約関数は、一時値とはうまく作動しません。( 値を数字に変換し、最初の非数値文字の後のパートを失います ) 。この問題を回避するには、数値ユニットを変換し、集約演算を行い、一時値に変換しなおすという方法があります。例 :

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;
  • AVG([DISTINCT] expr)

    expr の平均値を戻します。expr の固有値の平均を戻すのに、DISTINCT オプションを使用することができます。

    一致する行がない場合、AVG() は NULL を戻します。

    mysql> SELECT student_name, AVG(test_score)
        ->        FROM student
        ->        GROUP BY student_name;
    
  • BIT_AND(expr)

    expr 内のすべてのビットの、ビット単位の AND を戻します。計算は 64 ビット ( BIGINT ) の精度で行われます。

    この関数は、一致する行がない場合は、18446744073709551615 を戻します。( これは、すべてのビットが 1 に設定された、符号なしの BIGINT 値の値です。)

  • BIT_OR(expr)

    expr 内のすべてのビットの、ビット単位の OR を戻します。計算は 64 ビット ( BIGINT ) の精度で行われます。

    この関数は、一致する行がない場合は、0 を戻します。

  • BIT_XOR(expr)

    expr 内のすべてのビットの、ビット単位の XOR を戻します。計算は 64 ビット ( BIGINT ) の精度で行われます。

    この関数は、一致する行がない場合は、0 を戻します。

  • COUNT(expr)

    SELECT 分によって引き出された行の、非 NULL 値の数を戻します。結果は BIGINT 値になります。

    一致する行がない場合、COUNT() は 0 を戻します。

    mysql> SELECT student.student_name,COUNT(*)
        ->        FROM student,course
        ->        WHERE student.student_id=course.student_id
        ->        GROUP BY student_name;
    

    COUNT(*) は、NULL 値を含む含まざるに関わらず、引き出された行の数を戻すという点でやや異なります。

    COUNT(*) は、SELECT がひとつのテーブルから検索し、他のカラムは引き出されず、また WHERE カラムがない場合、きわめて素早く戻すよう最適化されています。例 :

    mysql> SELECT COUNT(*) FROM student;
    

    この最適化は、正確な行の数がこの保存エンジンに保管されており、素早いアクセスが可能なため、MyISAM テーブルにのみ適用します。InnoDB をはじめとするトランザクション保存エンジンに関しては、正確な行の数を保存するのは、複数のトランザクションが起こって、それぞれが行の係数に影響をおよぼす場合があるため、より困難になります。

  • COUNT(DISTINCT expr,[expr...])

    異なる非 NULL 値の数を戻します。

    一致する行がない場合、COUNT(DISTINCT) は 0 を戻します。

    mysql> SELECT COUNT(DISTINCT results) FROM student;
    

    MySQL では、式のリストを提供することにより、NULL を含まない、異なる式のコンビネーションの数を得ることができます。標準 SQL では、COUNT(DISTINCT ...) 内で、すべての式の連結を行わなければなりません。

  • GROUP_CONCAT(expr)

    この関数は、グループからの連結された非 NULL 値を伴うストリング結果を戻します。非 NULL 値がない場合は NULL を戻します。全構文は次の通りです :

    GROUP_CONCAT([DISTINCT] expr [,expr ...]
                 [ORDER BY {unsigned_integer | col_name | expr}
                     [ASC | DESC] [,col_name ...]]
                 [SEPARATOR str_val])
    
    mysql> SELECT student_name,
        ->     GROUP_CONCAT(test_score)
        ->     FROM student
        ->     GROUP BY student_name;
    

    または :

    mysql> SELECT student_name,
        ->     GROUP_CONCAT(DISTINCT test_score
        ->               ORDER BY test_score DESC SEPARATOR ' ')
        ->     FROM student
        ->     GROUP BY student_name;
    

    MySQL では、式のコンビネーションの連結された値を得ることができます。DISTINCT を使用することで、重複した値を除くことが可能です。結果の値をソートしたい場合は、ORDER BY 句を使用してください。逆順でソートするには、DESC ( 降順 ) キーワードを、ORDER BY 句のソートするカラムの名前に加えてください。デフォルトでは昇順になっています。これは、ASC を使うことで明示的に指定することができます。SEPARATOR の後には、結果の値の間に挿入されるべきストリング値が続きます。デフォルトは コンマ ( ‘,’ ) です。SEPARATOR '' を使用すると、セパレータを一挙に取り除くことができます。

    group_concat_max_len システム環境変数は、許可された最大の長さに設定することができます。 ( デフォルト値は 1024 ) 。ランタイムでこれを行う構文は次です。val は符号なしの整数になります :

    SET [SESSION | GLOBAL] group_concat_max_len = val;
    

    最大の長さが設定された場合、結果はその最大の長さに切り詰められます。

    GROUP_CONCAT() によって戻されるタイプは、group_concat_max_len が 512 より大きい場合意外は常に VARCHAR になります。512 を越える場合は BLOB になります。

    CONCAT() および CONCAT_WS() も併せてご覧ください : 項11.3. 「文字列関数」.

  • MIN([DISTINCT] expr), MAX([DISTINCT] expr)

    expr の最小または最大値を戻します。MIN() および MAX() はストリングの引数を取る場合があります。その場合、それらは最小または最大のストリング値を戻します。項6.4.5. 「MySQLにおけるインデックスの使用」 をご覧ください。DISTINCT キーワードで expr の固有の値の最小または最大を検出できますが、その場合、DISTINCT を省略した場合と同じ結果を生成します。

    一致する行がない場合、MIN() および MAX() は NULL を戻します。

    mysql> SELECT student_name, MIN(test_score), MAX(test_score)
        ->        FROM student
        ->        GROUP BY student_name;
    

    MIN() 、MAX() 、および他の集約関数に関しては、MySQL は現在、ENUM と SET カラムを、セット内でのそれらのストリングの相対位置によってではなく、ストリング値によって比較しています。これは、ORDER BY がそれらをどう比較するかによって異なります。この点は、将来の MySQL リリースに反映される予定です。

  • STD(expr) STDDEV(expr)

    expr の母標準偏差を戻します。これは標準 SQL へのエクステンションです。この関数の STDDEV() フォームは、Oracle との相互性のために提供されています。標準 SQL 関数 STDDEV_POP() を代わりに使用することも可能です。

    これらの関数は、一致する行がない場合は、NULL を戻します。

  • STDDEV_POP(expr)

    expr の母標準偏差 ( VAR_POP() の平方根 ) を戻します。STD() または STDDEV() を使用することもできます。これらは同等ですが標準 SQL ではありません。

    一致する行がない場合、STDDEV_POP() は NULL を戻します。

  • STDDEV_SAMP(expr)

    expr の試料標準偏差 ( VAR_SAMP() の平方根 ) を戻します。

    一致する行がない場合、STDDEV_SAMP() は NULL を戻します。

  • SUM([DISTINCT] expr)

    expr の集計を戻します。返しセットが行を持たない場合、SUM() は NULL を戻します。MySQL 5.1 で DISTINCT を使用して、expr の重複しない値のみを集計することができます。

    一致する行がない場合、SUM() は NULL を戻します。

  • VAR_POP(expr)

    expr の母標準分散を戻します。行をサンプルではなく全母集団としてとらえ、行の数を分母として得ます。また、VARIANCE() を使用することもできます。これは同等ですが標準 SQL ではありません。

    一致する行がない場合、VAR_POP() は NULL を戻します。

  • VAR_SAMP(expr)

    expr のサンプル分散を戻します。この分母は行の数から 1 をひいたものです。

    一致する行がない場合、VAR_SAMP() は NULL を戻します。

  • VARIANCE(expr)

    expr の母標準分散を戻します。これは標準 SQL へのエクステンションです。標準 SQL 関数 VAR_POP() を代わりに使用することも可能です。

    一致する行がない場合、VARIANCE() は NULL を戻します。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.