' 0'的目的在列名之前

时间:2018-02-05 19:47:42

标签: mysql

我只是想知道,在列名之前<0> <0>的目的是什么,因为我是这个领域的新手,所以帮助我理解清楚的事情并且更好办法。我的工作查询在下面给出,并且提到的行对我来说没有意义。感谢。

0 sdebit_amount

0 scredit_amount

0 scredit_amount,

SELECT 
MONTH AS month,
ROUND(IFNULL(scredit_amount,0),2) AS purchase,
ROUND(IFNULL(sdebit_amount,0),2) AS cash_paid
FROM 
(SELECT 
MONTHNAME(sc.scredit_date) as month,
IFNULL(SUM(sc.scredit_amount),0) AS scredit_amount,
0 sdebit_amount
FROM
sup_credit sc 
WHERE YEAR(sc.scredit_date) = YEAR(NOW()) 
GROUP BY MONTHNAME(sc.scredit_date) 

union all

SELECT 
MONTHNAME(sd.sdebit_date) as month,
0 scredit_amount,
IFNULL(SUM(sd.sdebit_amount),0) AS sdebit_amount
FROM
sup_debit sd
WHERE YEAR(sd.sdebit_date) = YEAR(NOW()) 
GROUP BY MONTHNAME(sd.sdebit_date)

union all

SELECT
 MONTHNAME(tpr.date) as month,
 0 scredit_amount,
 IFNULL(SUM(tpr.sub_total),0) sdebit_amount
 FROM
 tbpurchase_return tpr WHERE tpr.method='CREDIT'
 AND YEAR(tpr.date) = YEAR(NOW())
 GROUP BY MONTH(tpr.date)
 ) ABC
 group by month

2 个答案:

答案 0 :(得分:0)

查看SELECT statement的文档。

SELECT子句可以包含一个或多个以逗号分隔的 select_expr select_expr 是一个表达式(使用表格列,文字常量,运算符和函数组成)。

它可以有一个别名;别名是表达式后面的标识符,可以选择由AS关键字引入。

在您的示例中,0 sdebit_amount0 AS sdebit_amount相同,表示:选择值0并使用sdebit_amount作为结果集中此列的名称。结果集将包含一个名为sdebit_amount的列,其值为0,用于结果集中的所有行。

类似地,ABC在最后group by month之前是两个UNION ALL statements(最外面的括号)生成的表的别名。虽然select表达式别名是可选的,但对于derived tables(更大查询的FROM子句中出现的子查询)是必需的。

答案 1 :(得分:0)

该查询使用UNION将表与信用记录和带有借记记录的表组合在一起。信用表没有debit_amount列,借记表没有credit_amount表。组合表需要这两列。因此,当查询从debit_amount表中进行选择时,查询会添加0sup_credit,并在credit_amount列中添加0sup_debit {1}}表。

然后外部查询将所有内容汇总在一起。