在MYSQL中,是否使用SELECT语句中的变量进行计算?
是否可以使用两列的值在新列中进行计算 查询:在MYSQL中,是否使用SELECT语句中的变量进行计算?,mysql,sql,select,Mysql,Sql,Select,是否可以使用两列的值在新列中进行计算 查询: SELECT department.id AS 'ID', department.des AS 'Department', CASE department.des WHEN 'Retail Sales' THEN ( IFNULL(SUM(form.amount), 0) + (SELECT SUM(creditnote.amount)
SELECT department.id AS 'ID',
department.des AS 'Department',
CASE department.des
WHEN 'Retail Sales' THEN ( IFNULL(SUM(form.amount), 0)
+ (SELECT SUM(creditnote.amount)
FROM wf_creditnote AS creditnote
WHERE creditnote.status = 'a'
AND YEAR(creditnote.submittime) = 2013
AND MONTH(creditnote.submittime) = 11) )
ELSE IFNULL(SUM(form.amount), 0)
END AS 'Actual',
budget.budget AS 'Budget'
FROM (wf_analysis_billcodes AS billcode
LEFT JOIN wf_waiving AS form
ON form.billcode = billcode.bill_code
AND form.status = 'a'
AND YEAR(form.sbmt) = 2013
AND MONTH(form.sbmt) = 11),
wf_analysis AS department,
wf_analysis_budgets AS budget
WHERE department.id = billcode.dept_id
AND department.id = budget.dept_id
AND budget.year = 2013
AND budget.month = 11
GROUP BY department.des
ORDER BY department.id ASC
结果:
+----+------------+--------+--------+
| ID | Department | Actual | Budget |
+----+------------+--------+--------+
| 1 | IT | 327 | 200 |
| 2 | Finance | 312 | 500 |
| 3 | Marketing | 100 | 650 |
| 4 | HR | 423 | 320 |
+----+------------+--------+--------+
我想通过SELECT语句添加一个百分比列。将查询转换为子查询,并在主查询中执行计算,方法如下:
SELECT q.*,
((Budget-Actual)*100/Budget) AS Percent
FROM (
... your query ...
) AS q
演示->
为避免被0除错误,可以使用大小写表达式:
SELECT q.*,
CASE WHEN Bydget <> 0
THEN ((Budget-Actual)*100/Budget)
ELSE 0
END AS Percent
FROM (
... your query ...
) AS q
Alter Table-然后更新您想只在视图中获取结果,还是想在表中更新结果?您可以尝试将其添加到SELECT子句中:实际预算*100/预算为Percent@sarwar026仅在视图中,我不想更新表。@AzizShaikh我得到了以下错误:1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第21行使用接近“-Actual*100/Budget AS Percent,其中department.id=billcode.dept_id”,我得到以下错误:1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第25行使用接近“-Actual*100/Budget AS Percent WHERE department.id=billcode.dept_id”的正确语法,我猜您的查询是错误的-例如,您在这里使用引号:作为“Actual”而不是反勾字符,有什么问题吗。请先更正查询中的语法错误,然后重试。一般来说,将任何查询转换为子查询总是有效的,请参见这个简单的示例:->我没有正确地表达查询。现在很好,谢谢。