我有一个名为ps_product_supplier
的表:
我想选择所有产品product_supplier_reference
发生多次的产品,如果它出现在主要产品(id_product_attribute = 0
)和组合上。
我试过这个选择,但我没有得到任何结果:
SELECT `id_product_supplier`, `id_product`, `id_product_attribute`,
`product_supplier_reference`, COUNT(`product_supplier_reference`)
FROM `ps_product_supplier`
GROUP BY `id_product`
HAVING COUNT(`product_supplier_reference`) > 1
AND `id_product_attribute` = 0
AND `product_supplier_reference` > 0
但是正如你在product_supplier_reference
1426和4210上id_product_supplier
相同,我可以在图片上看到一个。{/ p>
任何可以帮助我的人?
答案 0 :(得分:1)
您需要将所有列添加到group by子句中,以便它可以工作:
SELECT `id_product_supplier` , `id_product` ,
`product_supplier_reference` , COUNT( `product_supplier_reference` )
FROM `ps_product_supplier`
WHERE `product_supplier_reference` >0
GROUP BY `id_product`,`id_product_supplier`,`product_supplier_reference`
HAVING COUNT( `product_supplier_reference` ) >1
答案 1 :(得分:1)
您需要减少select子句中列出的列数(这将减少行数)或者在group by子句中添加更多列名(这会增加行数)或者在更多列上使用聚合函数。
请注意,HAVING子句是为评估聚合值而设计的,您仍然可以使用WHERE子句进行聚合过滤。
## least rows
SELECT `id_product`
Count(`product_supplier_reference`)
FROM `ps_product_supplier`
WHERE `id_product_attribute` = 0
AND `product_supplier_reference` > 0
GROUP BY `id_product`
HAVING Count(`product_supplier_reference`) > 1
OR
## most rows
SELECT
`id_product`,
`id_product_attribute`,
`product_supplier_reference`,
Count(`product_supplier_reference`)
FROM `ps_product_supplier`
WHERE `id_product_attribute` = 0
AND `product_supplier_reference` > 0
GROUP BY `id_product`,
`id_product_supplier`,
`id_product_attribute`,
`product_supplier_reference`
HAVING Count(`product_supplier_reference`) > 1