簡體   English   中英

MySQL分組子查詢優化

[英]MySQL Grouping SubQuery Optimization

我有一個類別表和一個產品表。 產品具有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子句中使用了它。 謝謝!

您可以嘗試以下方法:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM