2016-03-14 22 views
0

我有以下SQL命令:在ID列中使用IN語句並檢索c​​ount(*)?

SELECT * from products 
WHERE id IN (
    SELECT product_id, count(*) 
    FROM account_products 
    GROUP BY product_id 
) 

顯然它不獲取任何數據,因爲內部查詢檢索兩列(產品和計數)。 但是我也需要計數,因爲我將在稍後使用它來進行一些數學計算。 如何使用count(*)也可以使用這個IN查詢?

謝謝!

+0

其中RDBMS(產品和版本)? – Shnugo

+1

您需要解釋更多關於您將如何使用計數的更多信息。如果您想在稍後的同一個查詢中重用子查詢,則繁瑣選項可能是臨時表或公用表表達式。 'IN'子句要求只返回一列(有些系統可能會忽略第一列之後的列) –

回答

4

加入他們的行列:

select products.*, t.product_count 
from products 
    join (
    SELECT product_id, count(*) as product_count 
    FROM account_products 
    GROUP BY product_id 
) as t on t.product_id = products.id 
1
select products.*, count(account_products.product_id) 
from products join account_products on 
    products.product_id = products.id 
group by products.* (obviously all products-fields) 
1

或用SELECT子句中的子查詢,當你的DBMS支持它:

SELECT 
    products.*, 
    (SELECT count(*) FROM account_products ap WHERE ap.product_id = products.id) as "Number of Accounts" 
from products 
1

這可能會爲你工作:

WITH MyAccountProducts AS 
(
    SELECT product_id, count(*) AS CountOfAccountProducts 
    FROM account_products 
    GROUP BY product_id 
) 
SELECT p.*,ap.CountOfAccountProducts 
from products AS p 
INNER JOIN MyAccountProducts AS ap ON p.id=ap.product_id 
相關問題