2016-09-26 46 views
0

我在编程方面颇为新颖,我必须为当天创建我的任务摘要。 我有3个表一为countries一个task,一个用于customersMySQL如何为当天生成摘要

这里是表认定中

CREATE TABLE `countries` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `code` varchar(2) NOT NULL DEFAULT '', 
    `name` varchar(100) NOT NULL DEFAULT '', 
    PRIMARY KEY (`id`) 
); 

CREATE TABLE `customer` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(100) NOT NULL, 
    `email` varchar(100) NOT NULL, 
    `country` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `country` (`country`) 
); 

CREATE TABLE `task` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(100) NOT NULL, 
    `date` date NOT NULL, 
    `design_type` enum('Digitize','Vector','Quote') NOT NULL DEFAULT 'Digitize', 
    `order_type` enum('New','Edit','Revision') NOT NULL DEFAULT 'New', 
    `customer_id` int(10) unsigned NOT NULL, 
    `priority` enum('High','Medium','Low') NOT NULL Default 'High', 
    `remarks` text NULL, 
    PRIMARY KEY (`id`), 
    KEY `customer_id` (`customer_id`) 
); 

现在我要创建这样的总结。

--------------------------------------------------------------- 
| Country Name | New | Revision | Edit | Total Order | 
+----------------+-------+-----------+--------+---------------+ 
| Australia  | 2 | 1  | 0  | 3   | 
| Pakistan  | 4 | 0  | 2  | 6   | 
| United State | 3 | 1  | 1  | 5   | 
| United Kd  | 2 | 2  | 0  | 4   | 
+----------------+-------+-----------+--------+---------------+ 

我有建立一些伪数据是sqlfiddle.com

任何建议将受到赞赏。 大谢谢

+2

现在你有在sqlfiddle的数据 - 你需要做的就是尝试自己解决这个问题。将问题分解成若干部分 - 查询任务表以获取今天的任务,然后构建查询以加入其他表并选择所需的列。如果遇到问题,请将您的查询添加到sqlfiddle并提出具体问题。 – PaulF

+0

我真的很困惑,解决这个查询我真的没有任何想法,使这种类型的查询。可以请这个查询 –

+0

正如我所说 - 将问题分解成小块。加入表格并选择所有结果是一个非常基本的SQL查询,你应该能够找到如何在基本的SQL教程中做到这一点 - 你有没有设法做到这一点?分组和添加需要条件金额的列有点高级 - 但我建议你谷歌如何做到这一点。您不应该试图使用StackOverflow作为代码编写服务 - 您需要证明您已经尝试过自己并提出具体问题,以解释为什么它无法按预期工作。 – PaulF

回答

1

经过一段时间在互联网上发现和搜索后,我真的没有得到任何关于这篇文章的想法。但通过付出更多的努力,我想它可以通过聚合函数来解决,并最终得到欲望的结果。这里是我的最终查询..

SELECT c.name, c.code, 
SUM(IF(t.order_type = 'New',1,0)) new, 
SUM(IF(t.order_type = 'Revision',1,0)) revision, 
SUM(IF(t.order_type = 'Edit',1,0)) edit 
FROM task AS t 
JOIN customer AS cus ON cus.id = t.customer_id 
JOIN countries AS c ON c.id = cus.country 
WHERE t.date = CURRENT_DATE AND t.status != 'Completed' 
GROUP BY c.id