2013-10-30 49 views
0

是否有比我更快的解決方案?打印每個訂單的訂單數量products_id

我有一個表列orders_id和products_id(不能更改)

現在我想知道有獨特products_id取得多少訂單。

我嘗試了以下。但是在裝載太多行時崩潰(160'000)。

SELECT DISTINCT `products_id` , `products_name` , COUNT(*) as totalorders FROM `orders_products` ORDER BY `products_id` ASC 

我也嘗試過子查詢,但是與上面相同的問題。

SELECT (SELECT count(*) FROM orders_products WHERE products_id = op.products_id) AS totalorders, products_id, products_name FROM orders_products op ORDER BY products_id ASC 
+0

你爲什麼不使用「GROUP BY」?如果這是MySQL,請發佈'EXPLAIN'輸出。 – Kermit

回答

0

如何:

SELECT `products_id`, `products_name`, COUNT(*) FROM `orders_products` GROUP BY (`products_id`, `products_name`) ORDER BY `products_id` 
+0

由於您在products_id上進行聚合,因此您需要products_name上的聚合函數,或者需要將其包含在分組中。 – TDrudge

+0

@TDrudge不錯的地方。更正了答案。謝謝你。 – alandarev

0

希望你有products_id

指數在這種情況下,我會嘗試像下面這樣:

選擇products_id,閔(Products_Name ),計數(*)作爲總訂單 來自訂單_產品 按產品_ID 訂購按產品_ID asc

還有其他一些方法可以獲取products_name,比如將其包含在分組中(其他一些含義)。