https://dev.mysql.com/doc/refman/8.0/en/user-variables.html
涉及用户变量的表达式的求值顺序未定义。例如,不能保证
SELECT @a, @a:=@a+1
评估
@a
首先,然后执行分配。
这意味着你显示的用法,你假设
@solved
和
@tutti
在计算之前分配
percentage
表达,是不可靠的。
更好的方法是将查询放在子查询中,然后使用别名计算外部查询中的表达式:
SELECT id, description, tipo, color, solved, tutti,
(ROUND(solved/tutti,0)*100) as percentage
FROM (
SELECT
items_type_catalog.id,
items_type_catalog.description,
items_header.tipo,
items_type_catalog.color,
COUNT(CASE WHEN (items_header.stato = 4 OR items_header.stato= 5) THEN 1 END) AS solved,
COUNT(items_header.id) AS tutti
FROM items_type_catalog
LEFT JOIN items_header
ON items_type_catalog.id=items_header.tipo AND items_header.progetto=1
GROUP BY items_type_catalog.id, tipo
) AS t;