sql >> データベース >  >> RDS >> Mysql

mysqlの集計関数を使用して変数に値を割り当てるにはどうすればよいですか?

    ユーザー定義のセッションを使用する whereの変数 句は、事前に初期化されている場合にのみ可能です。 。特に明記されていない限り、 SQL-クエリの演算の順序 、変数にはデフォルトのNULLがあります 条件が期待どおりの結果を満たさない可能性があります。

    set @var:=0;
    
    SELECT
          sClass class,
          @var := cast(sum(maths+physics+chemistry)
                       /(count(sid)*3) as decimal(6,2)
                  ) as avgMarksPerSubject,
          @var as variableValue,
          count(sid) as numberOfStudents
    FROM  StudentInformation
    where @var < 65
    group by sClass
    ;
    
    +-------+--------------------+---------------+------------------+
    | CLASS | AVGMARKSPERSUBJECT | VARIABLEVALUE | NUMBEROFSTUDENTS |
    +-------+--------------------+---------------+------------------+
    | 11th  |              72.13 |             0 |                5 |
    | 12th  |              60.83 |             0 |                4 |
    +-------+--------------------+---------------+------------------+
    

    ここでは、変数に行ごとの値が割り当てられておらず、前の列式で計算された値からも明確にわかります。

    次のクエリを実行すると、その副作用を確認できます。

    select * from (
      SELECT
          sClass class,
          @var := cast(sum(maths+physics+chemistry)
                       /(count(sid)*3) as decimal(6,2)
                  ) as avgMarksPerSubject,
          @var as variableValue,
          count(sid) as numberOfStudents
      FROM StudentInformation
      group by sClass
    ) r where avgMarksPerSubject > 65
    
    +-------+--------------------+---------------+------------------+
    | CLASS | AVGMARKSPERSUBJECT | VARIABLEVALUE | NUMBEROFSTUDENTS |
    +-------+--------------------+---------------+------------------+
    | 11th  |              72.13 |         60.83 |                5 |
    +-------+--------------------+---------------+------------------+
    

    @ SQL Fiddle




    1. MySQLはデータベースをインポートしますが、特定のテーブルを無視します

    2. MySQLMyISAMテーブルのパフォーマンスの問題の再検討

    3. psql:致命的:ロールpostgresは存在しません

    4. MySQLの全文検索で3文字以下の単語を検索