2014-11-14 25 views
0

我會與PIC開始:獲取完成一套擁有所需零件的比例,比較兩個表一個整數

tables and desired output

現在我看到,我忘了加「擁有」的Desired輸出表中的第二列,但希望您能看到我在此嘗試完成的工作。

本質上,我想加入上面的兩個示例表,以創建一個像第三個輸出。我可以使用Count()/ Count()* 100在左連接上解決它每行有1個項目,但是如何使用提供的整數獲得每個產品的完整性?

我見過系統可以做到這一點,但我不能爲我的生活弄清楚如何。 PS:真正的表格將有大約20k個產品,每個產品有5到4000個零件。

+0

我是即使是在正確的軌道上是這樣的: '選擇一個.Product, [神奇的東西,可能包括也可能不包括Count(AllTheProductsParts)/ Count(OwnedParts)* 100] AS Completeness LEFT JOIN A ON A.PartI D = B.PartID GROUP BY產品ORDER BY完整性DESC' – user1849393 2014-11-15 00:08:19

+0

890011到890016都應該是890010,對不對? – Strawberry 2014-11-15 00:44:59

+0

是的,沒錯 - 對不起,我錯過了 – user1849393 2014-11-15 02:52:40

回答

0
DROP TABLE IF EXISTS required; 

CREATE TABLE required 
(product INT NOT NULL 
,partID INT NOT NULL 
,Quantity INT NOT NULL 
,PRIMARY KEY (product,partID) 
); 

INSERT INTO required VALUES 
(41520 ,4107736 ,1), 
(41520 ,4142989 ,4), 
(41520 ,6047426 ,2), 
(41520 , 302328 ,6), 
(41520 ,6046381 ,1), 
(1253 ,6056225 ,2), 
(1253 ,3005749 ,2), 
(1253 ,4114011 ,2), 
(890010 ,4569733 ,2), 
(890010 ,6048855 ,2), 
(890010 ,6006739 ,2), 
(890010 ,6073026 ,2), 
(890010 ,6043639 ,2), 
(890010 ,6039479 ,2), 
(890010 ,4504382 ,3); 

DROP TABLE IF EXISTS owned; 

CREATE TABLE owned 
(partID INT NOT NULL PRIMARY KEY 
,Quantity INT NOT NULL 
); 

INSERT INTO owned VALUES 
(4142989 , 2), 
(6047426 , 2), 
(302328 , 2), 
(6039944 , 2), 
(4244573 , 2), 
(6046381 , 3), 
(6056225 , 2), 
(3005749 , 1), 
(4114011 , 2), 
(4264419 , 2), 
(6036850 , 2), 
(6030276 , 1), 
(6023954 , 2), 
(4164037 , 1), 
(4537937 ,14), 
(4567882 , 1), 
(4569733 , 2), 
(6048855 , 2), 
(6006739 , 2), 
(6073026 , 2), 
(6043639 , 2), 
(6039479 , 2), 
(4504382 , 3), 
(6069000 , 2), 
(374726 , 1), 
(4517925 , 2), 
(4598528 , 2), 
(6020193 , 2), 
(4107761 , 1); 

SELECT r.product 
     , ROUND(LEAST(SUM(r.quantity),SUM(o.quantity)/SUM(r.quantity)) * 100,2) pct_owned 
    FROM required r 
    LEFT 
    JOIN owned o 
    ON o.partid = r.partid 
    GROUP 
    BY product; 

+---------+-----------+ 
| product | pct_owned | 
+---------+-----------+ 
| 1253 |  83.33 | 
| 41520 |  64.29 | 
| 890010 | 100.00 | 
+---------+-----------+ 

http://sqlfiddle.com/#!2/74be1/2

注意,這並沒有考慮到這一事實,並非所有的產品可以simultaneoulsy組裝

+0

你是先生,是上帝。 但是,有一個基本缺陷 - 如果某個零件有1000個,那麼對於該產品,pct_owned將高於100% - 儘管它可能會遺漏該組的其他部分。 理想情況下,我們不希望統計超過所需部件的擁有部件 - 可以這樣做嗎? – user1849393 2014-11-15 02:16:04

+0

在我全知的情況下,我敢肯定,我考慮到了這一點!!! ...啊,也許你需要交換最少和總和 – Strawberry 2014-11-15 08:54:38

+0

嘗試SUM(至少(r.quantity,o.quantity)) /SUM(r.quantity)) – Strawberry 2014-11-15 09:01:22