mysql - 在同一查询中重用计算字段
问题描述
我有这个查询。
SELECT carte.nome, sum(amount) AS total, (1500-sum(amount)) AS residuo
FROM movimenti_carta JOIN carte ON movimenti_carta.banca=carte.id
WHERE data BETWEEN '2019-05-01' AND '2019-05-31'
GROUP by banca
此查询的目标是对一段时间内的一些金额 (sum(amount)) 求和。我还将这个数量的下限设置为 1500,所以我想在第三个字段中进行数学计算。我试着做
SELECT carte.nome, sum(amount) AS total, (1500-total) AS residuo
FROM movimenti_carta JOIN carte ON movimenti_carta.banca=carte.id
WHERE data BETWEEN '2019-05-01' AND '2019-05-31'
GROUP by banca
但是mysql抱怨说totale不是一个已知字段(它是一个派生字段)。第一个查询有效,但效率不高。第二个工作我缺少什么?
解决方案
您可以使用公用表表达式 (CTE):
WITH cte_query AS (
SELECT carte.nome AS nome, sum(amount) AS total
FROM movimenti_carta JOIN carte ON movimenti_carta.banca=carte.id
WHERE data BETWEEN '2019-05-01' AND '2019-05-31'
GROUP by banca
)
SELECT nome, total, (1500- total) AS residuo
FROM cte_query
子查询也可以工作:
SELECT nome, total, (1500- total) AS residuo
FROM (
SELECT carte.nome AS nome, sum(amount) AS total
FROM movimenti_carta JOIN carte ON movimenti_carta.banca=carte.id
WHERE data BETWEEN '2019-05-01' AND '2019-05-31'
GROUP by banca
) A
推荐阅读
- postgresql - Postgresql 行数无法正常工作
- drools - 将 Drools 决策表应用于 1-n 数据结构
- swift - 需要按键排序的快速字典问题
- google-cloud-platform - 在 Google Kubernetes Engine 中使用 Java API 的 Google Cloud Storage Upload 对象在 90 MB 文件上失败
- css - React-Select 留在 IFrame 中不会溢出 IFrame
- javascript - 为什么我不能在表单输入中输入任何内容
- python - 在python中使用glob匹配字符串中的模式
- gradle - Gradle 加速 - 使用模块方法
- postgresql - 如何查询列中数据的缩写?
- javascript - 如何在这个交叉点观察者内切换元素?