[英]Add a subquery to SELECT statement that depends on the first column?
有沒有一種方法可以編寫此查詢,以便獲得與我的category_id
比較的子查詢結果。
SELECT category_id,
count(id) as TOTAL COUNT,
(select count(*) from products where product_path LIKE '%Electronics%'
and category_id = category_id ) as ELECTRONIC COUNT
FROM products
WHERE product_path LIKE '%Products%'
GROUP BY category_id
我希望以下面的方式顯示結果:
"category_id" "TOTAL COUNT" "ELECTRONIC COUNT"
"173" "1" "243"
"42" "1" "243"
"211" "41" "243"
"162" "10" "243"
"172" "139" "243"
"116" "54" "243"
"10" "3" "243"
我希望電子計數取決於類別。 也就是說,第一行應該在category_id = 173
,第二行應該在category_id = 42
,第三行應該在category_id = 211
等處。
要使您的相關子查詢與同一個表一起使用,您必須使用表別名 :
SELECT category_id
,count(*) AS total_count -- unquoted column alias with space is wrong, too
,(SELECT count(*)
FROM products AS p1
WHERE product_path LIKE '%Electronics%'
AND p1.category_id = p.category_id
) AS electronic_count
FROM products AS p
WHERE product_path LIKE '%Products%'
GROUP BY category_id;
假設id
是主鍵,因此是NOT NULL
。 然后count(*)
做得更好。
但這可以進一步簡化為:
SELECT category_id
,count(*) AS total_count -- keyword AS is needed for column alias
,count(product_path LIKE '%Electronics%' OR NULL) AS electronic_count
FROM products p -- keyword AS is just noise for table alias
WHERE product_path LIKE '%Products%'
GROUP BY category_id;
快多了。
count()
僅計算非空值。 通過添加OR NULL
我將FALSE
轉換為NULL
。 因此,僅對那些行進行計數,其中product_path LIKE '%Electronics%'
計算結果為TRUE
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.