2017-07-31 137 views
1

我有以下表格:SQL連接查詢選擇

表:產品

--------------------------  
id_product | name_product        
--------------------------  
1   | p1        
2   | p2     
3   | p3 

表:序號

----------------------- 
imei  | id_product 
----------------------- 
56789  | 1 
56799  | 2 
56713  | 3 

表:化經營

---------------------- 
imei  | date 
------------------ 
56789 |31-07-2017 

最後,我要得到這樣的結果:

--------------------------------------- 
name_product | number_operation 
--------------------------------------- 
p1   | 1 
p2   | 0 
p3   | 0 

感謝您

+0

您可以用幾個內部連接完成此任務。從「SELECT * FROM product」開始工作。然後內部將它與基於2個id_product列的數字結合起來。最後你會根據imei的數量和操作再次進行內部連接。我不確定你想要輸出'number_operation',但如果它是操作的索引,那麼我很抱歉。但無法幫助你。我是一個postgres用戶,我不認爲SQL有數據庫中的元素的順序。 – MrKickkiller

+0

你想要什麼輸出?清楚地說明 –

+0

@johnHc我想要統計多少個產品在運行 –

回答

0

這將通過產品數的操作數量:

select name_product, sum(num_op) 
from product p1 
left join number n2 
    on n2.id_product = p1.id_product 
left join 
    (
    select imei, count(operation) as num_op 
    from Operation 
    group by imei 
    ) x 
    on x.imei = n2.imei 
group by name_product 

對於產品數量已經進行了手術:

select name_product, count(distinct o3.imei) 
from product p1 
left join number n2 
    on n2.id_product = p1.id_product 
left join Operation o3 
    on o3.imei = n2.imei 
group by name_product 
+0

謝謝你:D第二個它是oky –

0

可能的解決方案:

SELECT name_product, COUNT(*) 
FROM product p 
LEFT JOIN number n ON n.id_product = p.id_product 
LEFT JOIN operation o ON o.imei = n.imei 
GROUP BY p.id_product 
0
SELECT product.id_product,COUNT(number.id_product) 
FROM product 
INNER JOIN number ON product.id_product = number.id_product; 
GROUP BY product.id_product 
0
SELECT name_product, count (imei) c 
FROM (SELECT name_product, o.imei 
      FROM  (SELECT p.name_product, n.imei 
         FROM product p, "number" n 
         WHERE p.id_product = n.id_product) t 
       LEFT JOIN 
        Operatio o 
       ON t.imei = o.imei) 
GROUP BY name_product 

試試這個代碼