MySQL分组子查询优化

时间:2011-10-12 15:49:13

标签: mysql optimization subquery

我有一个类别表和一个产品表。产品有category_id,还有maker_id。

我试图返回一个类别名称表,以及一个二进制文件,表明该类别是否包含属于给定$ maker_id的任何产品(如PHP代码中所定义)。

我当前的方法计算每个类别中匹配产品的数量,但我假设有更快的方法,因为我只需要是/否。目前的代码:

SELECT 
    c.name,
    SUM(CASE WHEN p.maker_id = '{$maker_id}' THEN 1 ELSE 0 END) AS already_used
FROM categories c
LEFT JOIN products p ON p.category_id = c.id
GROUP BY c.id

我正在阅读使用EXISTS,但我发现的所有示例都在WHERE子句中使用它。谢谢!

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

SELECT c.name,COUNT(1) AS already_used, SUM(IF(p.status = 'ready', 1, 0)) AS ready_count 
FROM categories c 
LEFT JOIN products p 
ON  (p.category_id = c.id)
WHERE  p.maker_id = '{$maker_id}'
GROUP BY c.id;