以下查询将结果限制为20行,并且没有应用过滤器ID 6。
SELECT p.id, p.description
FROM product p
LEFT JOIN product_filter pf
ON pf.product_id = p.id
WHERE p.status = TRUE
GROUP BY p.id
HAVING SUM(pf.filter_id = '6') = 0
ORDER BY p.description ASC
LIMIT 0, 20
这很好用,但现在我想计算具有相同条件的行数。
SELECT COUNT(DISTINCT p.id) AS total
FROM product p
LEFT JOIN product_filter pf
ON pf.product_id = p.id
WHERE p.status = TRUE
HAVING SUM(pf.filter_id = 6) = 0
此查询返回零结果。
编辑:根据要求, SQLFiddle 以更详细的方式帮助您查看问题。
答案 0 :(得分:2)
你错过了GROUP BY p.id. 没有GROUP BY的情况不起作用。
SELECT COUNT(DISTINCT p.id) AS total
FROM product p
LEFT JOIN product_filter pf
ON pf.product_id = p.id
WHERE p.status = TRUE
GROUP BY p.id
HAVING SUM(pf.filter_id = 6) = 0
答案 1 :(得分:0)
虽然@Raymond Nijland的答案是正确的,但在我的环境中,他建议的代码不起作用。
通过查看这篇文章COUNT(*) returning multiple rows instead of just one,我设法通过以下方式使其发挥作用:
SELECT COUNT(DISTINCT p.id) AS total
FROM (SELECT p2.id
FROM product AS p2
LEFT JOIN product_filter pf
ON pf.product_id = p2.id
GROUP BY p2.id
HAVING SUM(pf.filter_id = '6') = 0) As p