数据库和查询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
谢谢!
答案 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对附件表进行分组并进行计数)。然后你可以将这个视图加入到你的查询中,你就可以轻松获得计数。