伯爵不会计算多个项目

时间:2013-11-29 12:14:58

标签: sql

数据库和查询http://sqlfiddle.com/#!2/a1db44/28

上下文:

sql语句包含两个包含,并为accesoires选择最严重的条件。因此,计数只计算一个加号而不是该产品的所有加号。我如何计算所有的服装?

期望的结果:

PRODUCTID   PRODUCTNAME     ACCESOIRESID    ACCESOIRESCONDITION    COUNT(A.PRODUCTID)
1           product1        2               defect                 3
2           product2        4               working                1
3           product3        6               obsolete               2

谢谢!

2 个答案:

答案 0 :(得分:4)

我在配件表中添加了第二个JOIN,这似乎产生了预期的结果:

SELECT 
p.productid, 
p.productname,
a.accesoiresid,
c.conditionname,
COUNT(a2.accesoiresid)
FROM product p 
join accesoires a2 on p.productId = a2.productId
join accesoires a on p.productId = a.productId
join cond c on c.conditionid = a.accesoirescondition
  where a.accesoirescondition =
  (select min(accesoirescondition) 
     from accesoires 
    where productId = p.productId)
group by p.productid

在原始代码中,cond上的联接包含accessoryid加入的限制,从而限制了查询的结果。

答案 1 :(得分:2)

好吧,当你已经在使用子查询时,为什么不使用它:

(select count(*) from accesoires a where a.productId = p.productId)

而不是count(a.productId)?

拥有一个视图也是一个好主意,该视图返回每个产品的附件计数(即,按照productId对附件表进行分组并进行计数)。然后你可以将这个视图加入到你的查询中,你就可以轻松获得计数。