Order BY在左连接方案中没有给出正确的结果

时间:2017-01-18 09:39:54

标签: mysql left-join sql-order-by rdbms

这是我正在使用的原始查询,我按营业日(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

有人可以解释为什么会发生这种情况吗?

0 个答案:

没有答案
相关问题