0

クエリ結果に余分な列を追加する必要があります。

列はパーセントと呼ばれる必要があります. 含まれている場合col1 == 0percent含まれている必要がありますNIS.percentceil(col2 / col1 * 100)

だから私は以下がうまくいくはずだと信じています:

IF(col1 = 0, 'NIS', ceil(col2 / col1 * 100)) as percent

しかし、col1 と col2 も複合体であるため、問題が発生します。

COUNT(distinct i.id) as col1
COUNT(distinct q.id) as col2

だから私は打たれる

「フィールド リスト」の不明な列「col1」

私はその問題を回避することができました
IF(COUNT(distinct i.id) = 0, 'NIS', ceil(COUNT(distinct q.id) / COUNT(distinct i.id) * 100)) as percent

しかし、それは私には余分な処理の束のように思えます.確かにそれを回避するより良い方法はありますか?

完全なクエリ

SELECT 
  `t`.*,
  `r`.`name` AS region_name,
  GROUP_CONCAT(DISTINCT p.ptype_id SEPARATOR "|") AS ptype_ids,
  COUNT(DISTINCT q.id) AS quoted,
  COUNT(DISTINCT i.id) AS intended,
  COUNT(DISTINCT qa.id) AS awarded,
  IF(
    intended = 0,
    `"NIS"`,
    CEIL(quoted / intended * 100)
  ) AS percent 
FROM
  (`tradesmen` t) 
  LEFT JOIN `regions` r 
    ON `r`.`id` = `t`.`region_id` 
  LEFT JOIN `quotes` q 
    ON `t`.`id` = `q`.`tradesman_id` 
  LEFT JOIN `quote_intentions` i 
    ON `t`.`id` = `i`.`tradesman_id` 
  LEFT JOIN `quotes` qa 
    ON `q`.`tradesman_id` = `qa`.`tradesman_id` 
    AND qa.accepted = 1 
  LEFT JOIN `ptypes_tradesmen` p 
    ON `p`.`tradesman_id` = `t`.`id` 
GROUP BY `t`.`id` 
LIMIT 20 
4

1 に答える 1

1
于 2012-08-28T00:56:22.083 に答える