Php 统计每个销售员每月的总数
我有一个带订单的mySQL表。每个表行包括订单日期、金额和销售人员Php 统计每个销售员每月的总数,php,mysql,sql,Php,Mysql,Sql,我有一个带订单的mySQL表。每个表行包括订单日期、金额和销售人员 order_id | amount | saleman_id | order_date 我想查询它,这样我就可以生成一个HTML表,其中包含一个看起来像这样的报告 Year | Month | Total | Total for salesman 1 | Total for salesman 2 | etc... 2014 | 10 | 5000 | 2000
order_id |
amount |
saleman_id |
order_date
我想查询它,这样我就可以生成一个HTML表,其中包含一个看起来像这样的报告
Year | Month | Total | Total for salesman 1 | Total for salesman 2 | etc...
2014 | 10 | 5000 | 2000 | 3000 | etc...
2014 | 11 | 6000 | 5000 | 1000 | etc...
这已经部分起作用了,这意味着我有一个查询,允许我创建一个报告,显示所有销售人员每月的总数,但我想知道是否有办法在单个SQL查询中实现我想要的,以及它是否值得。否则,我可以在PHP while循环中查询每个销售人员的结果,该循环生成我已有的th表
当前查询是:
SELECT
YEAR(ord_date) AS year,
MONTH(ord_date) AS month,
ROUND(SUM(...colum calculations...),2) AS sales,
COUNT(o.ord_id) AS count_orders
FROM
orders_ord AS o
GROUP BY
year, month
ORDER BY year DESC, month DESC;
我正在使用PHP5.4和经典的mysql模块&mySQL5.5而没有看到您的show create table,很难给出精确的查询。总的来说,我喜欢用SQL而不是PHP做所有的工作。但是,如果您有一个数据网格,并且希望显示小计或总计,则使用PHP将行相加 无论如何,这里有一些查询可以帮助您 此查询将为您提供四舍五入的利润和四舍五入的销售额
SELECT
rep_id,
YEAR(ord_date) AS year,
MONTH(ord_date) AS month,
MONTHNAME(ord_date) AS monthname,
ROUND(SUM(...colum calculations...),2) AS profit,
ROUND(SUM(...colum calculations...),2) AS sales,
COUNT(o.ord_id) AS count
FROM
orders_ord AS o
GROUP BY rep_id, year, month
ORDER BY year DESC, month DESC;
您可以使用以下工具执行您想要的操作: 但是,由于汇总的性质,我建议将
组中的年和月与组合:
SELECT YEAR(ord_date) AS year, MONTH(ord_date) AS month, repid, MONTHNAME(ord_date) AS monthname,
ROUND(SUM(...colum calculations...),2) AS profit,
ROUND(SUM(...colum calculations...),2) AS sales,
COUNT(o.ord_id) AS count
FROM orders_ord o
GROUP BY YEAR(ord_date) * 100 + MONTH(ord_date) desc, repid with rollup;
这将只为单个月份放置摘要行,而不是一年和一个月的摘要。让数据库完成所有工作,它擅长于。(并在从PHP填补空白时,将所有额外的行程保存到数据库。)
需要调整的是,如果真的不提供年度总数。您的问题是什么?您使用的是哪种MySQL API?MySQL服务器5.5.28,数据库客户端版本:libmysql-5.1.73@Mike“我想获得一份报告,在每行上显示每个销售人员每月的总销售额和每月的总销售额”如果可能的话,使用什么样的SQL来实现这一点。意思是说,mysql\uuuz
-mysqli\uuuz
或PDO?我想你想用PHP做这个?或者,仅仅是一个直接的SQL调用?对不起:)我想用PHP来做这个,对吗。我使用的API是mysql,但我也可以使用mysql。汇总和排序不是互斥的吗?为什么一年乘以100?@LavaRo。第二种方法是只获得一个汇总行(而不是一年一个月)。第一个原因是,我认为5.7版本的限制已经解除,不再支持使用groupby
进行默认排序。那是一种误解;它们仍然是相互排斥的。
SELECT YEAR(ord_date) AS year, MONTH(ord_date) AS month, repid, MONTHNAME(ord_date) AS monthname,
ROUND(SUM(...colum calculations...),2) AS profit,
ROUND(SUM(...colum calculations...),2) AS sales,
COUNT(o.ord_id) AS count
FROM orders_ord o
GROUP BY YEAR(ord_date) * 100 + MONTH(ord_date) desc, repid with rollup;
SELECT
YEAR(ord_date) AS year,
MONTH(ord_date) AS month,
MONTHNAME(ord_date) AS monthname,
saleman_id,
ROUND(SUM(...colum calculations...),2) AS profit,
ROUND(SUM(...colum calculations...),2) AS sales,
COUNT(o.ord_id) AS count
FROM
orders_ord
GROUP BY year, month, saleman_id
UNION ALL
SELECT
YEAR(ord_date) AS year,
MONTH(ord_date) AS month,
MONTHNAME(ord_date) AS monthname,
'zzz Total zzz',
ROUND(SUM(...colum calculations...),2) AS profit,
ROUND(SUM(...colum calculations...),2) AS sales,
COUNT(o.ord_id) AS count
FROM
orders_ord
GROUP BY year, month
ORDER BY year DESC, month DESC;