2016-09-26 47 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