0

私は以下のコードを持っています

 $sql = "SELECT 
               date1, 
               date2, 
               userid, 
               jobid, 
               result, 
               price, 
               total, 
              (SELECT distinct SUM(total1) FROM Jobs) as total2
        FROM 
               Jobs 
          WHERE 
              total <= total1 
          GROUP BY 
              '$newphrase', '$newphrase1', '$user', '$job', result 
          ORDER BY 
              jobid DESC, userid DESC";
    $result = mysql_query($sql);

総計を出力しますが、3回出力します出力は以下のとおりです

SN01 0.17 15 2.55 25.05
SN01 0.50 15 7.5  25.05
SN01 1    15 15   25.05

25.05 は 3 回出力されます。一度だけ必要です。私ははっきりと私が考えることができるすべてを試しました

4

4 に答える 4

1

それがSQLのしくみです-それを読むことをお勧めします。

メインの SELECT は 3 つのレコードを返し、それらのレコードのそれぞれに対して、total2 に対してインライン SELECT SUM() を実行します。これが、3 つの合計を取得する理由です。

それを止める唯一の方法は、メインの SELECT が 1 つのレコードを返すようにすることです。これにはさまざまな手法があります。

それでも複数のレコードが必要な場合は、複数の合計を無視して、返された最初のレコードのみを使用する必要があります。

于 2009-03-27T19:10:16.833 に答える
0

そのようなフォーマットされた出力が必要な場合は、おそらくレポートツールを使用する必要があります。

ハックが必要な場合は、次のようにsqlcaseステートメントを使用して最初の行の値のみを取得します。

SELECT 
           date1, 
           date2, 
           userid, 
           jobid, 
           result, 
           price, 
           total, 
           case when rownum = 1 then
              (SELECT distinct SUM(total1) FROM Jobs)
           else
               null
           end as total2
    FROM 
           Jobs 
      WHERE 
          total <= total1 
      GROUP BY 
          '$newphrase', '$newphrase1', '$user', '$job', result 
      ORDER BY 
          jobid DESC, userid DESC

警告:これはテストされていない、データベースに依存するコードです。

于 2009-06-25T15:09:15.530 に答える
0

合計以外のすべてを、すべての列 (合計を含む) が表された一時テーブルにスローします。ロードされたテーブルになるはずですが、合計列に null 値があります。次に、合計を一時テーブルに挿入する最終クエリを実行します。最後に、一時テーブルから選択します。

于 2009-03-27T19:15:26.087 に答える