簡體   English   中英

向依賴第一列的SELECT語句中添加子查詢?

[英]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.

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