所以,我需要一些代码帮助。 我有一个尴尬的小MySQL表,它不断增长和发展。
我们假设一组客户,某些国家/地区的客户,我需要“总计”发票(需要计算商品及服务税)
因此,两个表包含我需要的数据 - 一个表有他们的ID和他们的国家(在这种情况下,加拿大!)。 在我们的第二个表中,我有他们的发票,其中一个变量是来自table1的ID,另一个变量是我必须检索的(和总和)。 请注意,如果将它们汇总到四分之一,它会有所帮助。发票也有以下语法:2006-06-26(年 - 月 - 日)。
在表1中,为每个客户端设置的ID为:id - 它是数字,例如1-200000 在表1中,国家是:CA
在表2中,duedates的变量是:duedate 我们需要的另一个变量是小计
在表格2之外我基本上只需要抓住国家CA中的客户(来自table1的数据)和SUM发票。
输出应如下: 第一季度总和:$ x,xxx 第二季度总和:$ x,xxx 怎么样?
答案 0 :(得分:3)
你可以完全在mysql中处理这个:
SELECT
CONCAT('Q', QUARTER(inv.duedate), ' ', YEAR(inv.duedate)) as quarter,
SUM(inv.total) as total
FROM
invoices inv
LEFT JOIN clients cli ON inv.client_id = cli.id
WHERE
cli.country = 'CA'
GROUP BY
quarter
<强>输出:强>
+---------+--------+ | quarter | total | +---------+--------+ | Q1 2010 | 110.40 | | Q2 2010 | 10.20 | +---------+--------+ 2 rows in set (0.00 sec)
我的测试数据:
CREATE TABLE `clients` ( `id` int(11) NOT NULL, `country` varchar(3) DEFAULT NOT NULL ); INSERT INTO `clients` VALUES (1,'CA'); CREATE TABLE `invoices` ( `client_id` int(11) NOT NULL, `duedate` date DEFAULT NOT NULL, `total` decimal(10,2) DEFAULT NOT NULL ); INSERT INTO `invoices` VALUES (1,'2010-01-01','100.20'),(1,'2010-05-01','10.20'),(1,'2010-03-01','10.20');
答案 1 :(得分:0)
SELECT SUM(subtotal) FROM table1, table2 WHERE table1.id=table2.table1_id AND country='CA' AND duedate > foo AND duedate < foo
这应该是不言自明的。您将两个表连接成一个,通过匹配客户ID组合行。然后,您只选择来自country ='CA'的客户。然后,您只选择特定范围内的到期日期。然后汇总发票金额。洁食?
如果您想要按客户总计发票,除了总和之外只需选择table1.id
并在语句末尾添加GROUP BY table1.id
。