2017-07-31 132 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 

试试这个代码