0 mysql
这是我的查询
SELECT DISTINCT
SM.sales_date,
(SELECT
SUM(gross_sale)
FROM
sales_main AS INTERNAL
WHERE
INTERNAL.sales_date = SM.sales_date AND INTERNAL.vehicle_name=SM.vehicle_name) AS TGROSS,
(SELECT
SUM(net_sale)
FROM
sales_main AS INTERNAL
WHERE
INTERNAL.sales_date = SM.sales_date AND INTERNAL.vehicle_name=SM.vehicle_name) AS TNET,
(SELECT
SUM(cash)
FROM
sales_main AS INTERNAL
WHERE
INTERNAL.sales_date = SM.sales_date AND INTERNAL.vehicle_name=SM.vehicle_name) AS TCASH,
(SELECT
SUM(cheque)
FROM
sales_main AS INTERNAL
WHERE
INTERNAL.sales_date = SM.sales_date AND INTERNAL.vehicle_name=SM.vehicle_name) AS TCHEQUE,
(SELECT
SUM(credit)
FROM
sales_main AS INTERNAL
WHERE
INTERNAL.sales_date = SM.sales_date AND INTERNAL.vehicle_name=SM.vehicle_name) AS TCREDIT,
(SELECT
SUM((SELECT
amount
FROM
sales_main_deduction AS INTERNAL
WHERE
INTERNAL.instance = '4%' AND INTERNAL.idsales_main = SMinternal.idsales_main))
FROM
sales_main AS SMinternal
WHERE
SMinternal.sales_date = SM.sales_date AND SMinternal.vehicle_name=SM.vehicle_name) AS '4%'
,
(SELECT
SUM((SELECT
amount
FROM
sales_main_deduction AS INTERNAL
WHERE
INTERNAL.instance = '6%' AND INTERNAL.idsales_main = SMinternal.idsales_main))
FROM
sales_main AS SMinternal
WHERE
SMinternal.sales_date = SM.sales_date AND SMinternal.vehicle_name=SM.vehicle_name) AS '6%',
(SELECT
SUM((SELECT
amount
FROM
sales_main_deduction AS INTERNAL
WHERE
INTERNAL.instance = '10%' AND INTERNAL.idsales_main = SMinternal.idsales_main))
FROM
sales_main AS SMinternal
WHERE
SMinternal.sales_date = SM.sales_date AND SMinternal.vehicle_name=SM.vehicle_name) AS '10%',
(SELECT
SUM((SELECT
amount
FROM
sales_main_deduction AS INTERNAL
WHERE
INTERNAL.instance = 'M/R' AND INTERNAL.idsales_main = SMinternal.idsales_main))
FROM
sales_main AS SMinternal
WHERE
SMinternal.sales_date = SM.sales_date AND SMinternal.vehicle_name=SM.vehicle_name) AS 'M/R',
(SELECT
SUM((SELECT
amount
FROM
sales_main_deduction AS INTERNAL
WHERE
INTERNAL.instance = 'S/R' AND INTERNAL.idsales_main = SMinternal.idsales_main))
FROM
sales_main AS SMinternal
WHERE
SMinternal.sales_date = SM.sales_date AND SMinternal.vehicle_name=SM.vehicle_name) AS 'S/R'
FROM
sales_main AS SM
WHERE
(SM.sales_date >= '2013-06-01' AND SM.sales_date <= '2013-06-05') AND SM.vehicle_name='Lorry1'
Run Code Online (Sandbox Code Playgroud)
这就是结果..
2013-06-01 59582.03 58336.59 32096.96 11141.02 15098.59 1245.44
2013-06-03 132334.45 126461.84 33138.93 11046.63 82276.28 1774.46 557.02 3541.13 2013-06-04 72184.69 71882.93 27840.74 12410.16 31632.03 152.16 149.6
2013-06-05 93478.20 86721.32 34461.47 24971.24 27288.6 934.48 3553.32 2269.08
Run Code Online (Sandbox Code Playgroud)
但是,如果此查询扩展到每月 31 天,则需要 10 分钟才能从 2000 行表中返回结果......请帮助......
小智 5
到底为什么会有这些内心的疑问?
全部转换(我只是举个例子)
SELECT DISTINCT
SM.sales_date,
(SELECT
SUM(gross_sale)
FROM
sales_main AS INTERNAL
WHERE
INTERNAL.sales_date = SM.sales_date AND INTERNAL.vehicle_name=SM.vehicle_name) AS TGROSS,
(SELECT
SUM(net_sale)
FROM
sales_main AS INTERNAL
WHERE
INTERNAL.sales_date = SM.sales_date AND INTERNAL.vehicle_name=SM.vehicle_name) AS TNET,
Run Code Online (Sandbox Code Playgroud)
到:
SELECT
sales_date,
SUM(gross_sale) AS TGROSS,
SUM(net_sale) AS TNET
FROM
sales_main
WHERE
sales_date BETWEEN X AND Y
AND
vehicle_name=vehicle_name
GROUP BY YEAR(sales_date), MONTH(sales_date), DAY(sales_date)
Run Code Online (Sandbox Code Playgroud)
一旦你开始工作,我们就可以进一步优化它。
该GROUP BY也可以只是GROUP BY sales_date如果sales_date是的DATE类型,DATE(sales_date)如果是DATETIME类型。
我使用该 group by 来WITH ROLLUP总结我在报告服务中经常使用的组...
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |