MySQL显示最近两个月的销售额
我正试图按照以下格式提取一份显示最近两个完整日历月销售额的报告:MySQL显示最近两个月的销售额,mysql,Mysql,我正试图按照以下格式提取一份显示最近两个完整日历月销售额的报告: Customer August 2013 September 2014 Company A 1,250 2,543 Company B 4,245 1,423 Company C 1,432 1,642 我有一张有客户的桌子和一笔有成本的个人交
Customer August 2013 September 2014
Company A 1,250 2,543
Company B 4,245 1,423
Company C 1,432 1,642
我有一张有客户的桌子和一笔有成本的个人交易。我很好,但不知道如何让两列相邻
select customers.customer as Customer,
sum(job.price) as August_2014
from job,customers
where customers.cust_id=job.customer
and
job.collect_date between '2014-08-01' and '2014-08-31'
group by customer
order by August_2014 desc
limit 0,10
谢谢你的帮助
约翰试试这个:
SELECT
customers.customer AS Customer,
MONTH(job.collect_date) AS Month,
sum(job.price) AS SumPrice
FROM
job,
customers
WHERE
customers.cust_id = job.customer
GROUP BY
customer,
MONTH(job.collect_date)
您不能再按价格进行订购了。我相信你能自己做桌子吗
不,人们不能自己编写PHP,需要一个例子:
// the sql command
$sql = "SELECT
customers.customer AS Customer,
MONTH(job.collect_date) AS Month,
sum(job.price) AS SumPrice
FROM
job,
customers
WHERE
customers.cust_id = job.customer
GROUP BY
customer,
MONTH(job.collect_date)";
// fetching data
if ($result = $mysqli->query($sql))
{
while($row = $result->fetch_assoc())
{
extract($row);
$data[$Customer][$Month] = $SumPrice;
}
$result->close();
}
// render
foreach($data as $customer => $prices)
{
echo $customer;
foreach($prices as $month => $price)
{
echo ' '.$price;
}
echo '<br>';
}
//sql命令
$sql=“选择
顾客,顾客作为顾客,
月份(作业收集日期)为月份,
总和(工作价格)作为总价格
从…起
工作,
客户
哪里
customers.cust_id=job.customer
分组
顾客
月份(工作日期);
//获取数据
如果($result=$mysqli->query($sql))
{
而($row=$result->fetch_assoc())
{
摘录(行);
$data[$Customer][$Month]=$SumPrice;
}
$result->close();
}
//渲染
foreach($customer=>$prices)
{
echo$客户;
foreach($month价格=>$price)
{
回音“”。$价格;
}
回声“
”;
}
请注意,表呈现是非常基本的,但它给出了您的想法,您需要对其进行一些改进,使其更漂亮。无论数据库中的月份是什么,这都会起作用。主要优点是SQL查询的简单性。SUM()函数中的用例表达式,如下所示:
SELECT
customers.customer AS Customer
, SUM(case when job.collect_date >= '2014-08-01' and job.collect_date < '2014-09-01' THEN job.price ELSE 0 END) AS August_2014
, SUM(case when job.collect_date >= '2014-09-01' and job.collect_date < '2014-10-01' THEN job.price ELSE 0 END) AS September_2014
FROM job
INNER JOIN customers ON customers.cust_id = job.customer
WHERE ( job.collect_date >= '2014-08-01' AND job.collect_date < '2014-10-01' )
GROUP BY
customers.customer
ORDER BY
August_2014 DESC
limit 0,10
;
选择
顾客,顾客就是顾客
,合计(当job.collect_date>='2014-08-01'和job.collect_date<'2014-09-01'然后job.price ELSE 0结束时的情况)为2014年8月
,求和(当job.collect_date>='2014-09-01'和job.collect_date<'2014-10-01'然后job.price ELSE 0结束时的情况)为2014年9月
从工作
在customers.cust\u id=job.customer上内部加入客户
其中(job.collect_date>='2014-08-01'和job.collect_date<'2014-10-01')
分组
顾客
订购人
2014年8月描述
限值0,10
;
我更改了连接语法,强烈建议使用这种显式连接
还请注意,我已更改了“日期范围”的方法。只是不要为此而相信“中间人”。始终使用上述方法,数据中不会有任何间隙或重叠(即,您的数字将是准确的)
(日期字段>=此处日期较低,此处日期字段<此处日期较高)
正如您所看到的,“更高日期”比您的原始日期多一天,这是因为我们使用的比更高日期少您能给我们一个示例,说明您想要的输出吗。@arun希望您能通过“两列相邻”看到我想要的东西你是说8月和9月?我想他希望在同一行中的月份相邻。这不是答案,因为他希望在同一行中有两列关于价格的内容,这在这个查询中是无法实现的。好吧,你需要PHP来制作这个表。这太基本了,我忘了。但我会为那些不知道怎么做的人加上它。请注意,这个问题没有提到任何PHP…大家好,我在看两个不同月份的专栏。@KIKOSoftware我想我确实理解它的功能。它列出每个月每行。。。八月在它自己的行列中,九月在它自己的行列中。他希望August和Spetember在同一行,各自在自己的列中。至少我从他的问题中推断出他想要的是这个。