PHP / MySQL问题,后者更多

时间:2010-07-13 03:54:35

标签: sql mysql

所以,我需要一些代码帮助。 我有一个尴尬的小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 怎么样?

2 个答案:

答案 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