クエリ結果に余分な列を追加する必要があります。
列はパーセントと呼ばれる必要があります. 含まれている場合col1 == 0
はpercent
含まれている必要がありますNIS
.percent
ceil(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