1

工場の燃料消費量を計算する必要があります。私のクエリはLEFTJOINです。最初の「qry1」は、プラントが当月に稼働した合計時間を計算し、「qry2」は、各プラントで使用される合計ディーゼルを計算します。

これらはそれ自体で正常に機能しますが、「qry3」を追加すると、「qry2」からの答えが「qry1」になり、平均ディーゼル消費量が得られますが、これらの各左からの出力の使用方法がわかりませんJOINと結果を使用して、(非常に簡単であると思われる)計算を行います。

SELECT 
 `plant`.`plant_id`,
 `qry1`.`total_hrs`, 
 `qry2`.`total_d`, 
 `qry3`.`consumption`

FROM `plant` 

  LEFT JOIN ( 
   SELECT (MAX(`plant_hrs_stop`)- MIN(`plant_hrs_start`) ) AS total_hrs, `plant_id` 
   FROM`plant_hrs`  
   WHERE MONTH(`plant_hrs_date`)= MONTH( CURRENT_DATE )  
   GROUP BY`plant_id` 
  ) AS `qry1` ON `plant`.`plant_id`=`qry1`.`plant_id` 

  LEFT JOIN ( 
   SELECT (SUM(`diesel_qty`) ) AS total_d, `diesel_vehicle_no` AS `plant_id` 
   FROM`diesel`  
   WHERE MONTH(`diesel_date`)= MONTH( CURRENT_DATE )  
   GROUP BY `diesel_vehicle_no` 
  ) AS `qry2` ON `plant`.`plant_id`=`qry2`.`plant_id` 

  LEFT JOIN ( 
   SELECT (`qry2`.`total_d` / `qry1`.`total_hrs`) AS consumption,    
   FROM `qry1`, `qry2`  
   GROUP BY `plant_id` 
  ) AS `qry3` ON `plant`.`plant_id`=`qry3`.`plant_id`

ORDER BY `plant`.`plant_id` 

私はエラーを受け取り続けます、私はいくつかの検索を試みましたが、空になり続けます...

4

2 に答える 2

1

最後の結合は必要ありません。 そして確認してqry1.total_hrs <> 0ください:

SELECT 
 `plant`.`plant_id`,
 `qry1`.`total_hrs`, 
 `qry2`.`total_d`, 
 `qry3`.`consumption`,
  if(COALESCE(`qry1`.`total_hrs`,0)<>0,'qry2`.`total_d` / `qry1`.`total_hrs`,NULL) AS consumption

FROM `plant` 

  LEFT JOIN ( 
   SELECT (MAX(`plant_hrs_stop`)- MIN(`plant_hrs_start`) ) AS total_hrs, `plant_id` 
   FROM`plant_hrs`  
   WHERE MONTH(`plant_hrs_date`)= MONTH( CURRENT_DATE )  
   GROUP BY`plant_id` 
  ) AS `qry1` ON `plant`.`plant_id`=`qry1`.`plant_id` 

  LEFT JOIN ( 
   SELECT (SUM(`diesel_qty`) ) AS total_d, `diesel_vehicle_no` AS `plant_id` 
   FROM`diesel`  
   WHERE MONTH(`diesel_date`)= MONTH( CURRENT_DATE )  
   GROUP BY `diesel_vehicle_no` 
  ) AS `qry2` ON `plant`.`plant_id`=`qry2`.`plant_id` 

ORDER BY `plant`.`plant_id`
于 2012-08-14T13:48:33.457 に答える
0

最終的な計算を行うために別の結合は必要ありません。次のようにするだけです。

select `plant`.`plant_id`,
    `qry1`.`total_hrs`,
    `qry2`.`total_d`,
    (`qry2`.`total_d` / `qry1`.`total_hrs`) as consumption
from `plant`
left join (
    select (MAX(`plant_hrs_stop`) - MIN(`plant_hrs_start`)) as total_hrs,
        `plant_id` 
    FROM`plant_hrs`
    where MONTH(`plant_hrs_date`) = MONTH(current_date)
    group by `plant_id`
    ) as `qry1` on `plant`.`plant_id` = `qry1`.`plant_id`
left join (
    select (SUM(`diesel_qty`)) as total_d,
        `diesel_vehicle_no` as `plant_id`
    from `diesel`
    where MONTH(`diesel_date`) = MONTH(current_date)
    group by `diesel_vehicle_no`
    ) as `qry2` on `plant`.`plant_id` = `qry2`.`plant_id`
order by `plant`.`plant_id`

where句でMONTHを使用するだけで、1年以上のデータを取得できることに注意してください。これが意図したものでない場合は、YEAR()も使用してください。

于 2012-08-14T13:40:31.640 に答える