这是我正在使用的原始查询,我按营业日(1,5,... 31)排序销售额。
SELECT somelogic AS TOTAL,IT.BUSINESS_DAY,IT.BUSINESS_MONTH, IT.BUSINESS_YEAR
FROM (
SELECT SUM(IFNULL(CAST(FSTM.SALE AS DECIMAL(16,4)), 0)) AS ITEM_SALES, FSTM.BUSINESS_YEAR, FSTM.BUSINESS_MONTH, FSTM.BUSINESS_DAY
FROM AGG_FACT_SALE_SALE_TYPE_DAY FSTM WHERE
SALE_TYPE IN ('SALE', 'VOID', 'REOPENED') AND FSTM.MERCHANT_KEY = ${Mkey}
AND FSTM.YEAR = ${Year} AND FSTM.MONTH = ${Month}
GROUP BY FSTM.BUSINESS_DAY ORDER BY BUSINESS_DAY
) AS IT
LEFT JOIN (
sub query
) AS LD ON LD.BUSINESS_DAY = IT.BUSINESS_DAY
LEFT JOIN (
sub query
) AS DC ON DC.BUSINESS_DAY = IT.BUSINESS_DAY
LEFT JOIN (
subquery
) AS R ON R.BUSINESS_DAY = IT.BUSINESS_DAY
所以在'from'我按照工作日订购结果,然后使用left join来获取其余数据..但是在最终结果中,结果不按工作日排序。它几乎是随机的。
但是当我将ORDER BY添加到整个查询时,我得到了排序结果。修改后的查询如下。
SELECT somelogic AS TOTAL,IT.BUSINESS_DAY,IT.BUSINESS_MONTH, IT.BUSINESS_YEAR
FROM ((
SELECT SUM(IFNULL(CAST(FSTM.SALE AS DECIMAL(16,4)), 0)) AS ITEM_SALES, FSTM.BUSINESS_YEAR, FSTM.BUSINESS_MONTH, FSTM.BUSINESS_DAY
FROM AGG_FACT_SALE_SALE_TYPE_DAY FSTM WHERE
SALE_TYPE IN ('SALE', 'VOID', 'REOPENED') AND FSTM.MERCHANT_KEY = ${Mkey}
AND FSTM.YEAR = ${Year} AND FSTM.MONTH = ${Month}
GROUP BY FSTM.BUSINESS_DAY ORDER BY BUSINESS_DAY ASC
) AS IT
LEFT JOIN (
sub query
) AS LD ON LD.BUSINESS_DAY = IT.BUSINESS_DAY
LEFT JOIN (
sub query
) AS DC ON DC.BUSINESS_DAY = IT.BUSINESS_DAY
LEFT JOIN (
subquery
) AS R ON R.BUSINESS_DAY = IT.BUSINESS_DAY
) ORDER BY IT.BUSINESS_DAY ASC
有人可以解释为什么会发生这种情况吗?