2014-08-27 56 views
0

我試圖計算一個項目被購買的次數。但是,我也有一個類別表,也正在計算我的查詢,這當然是導致錯誤的數據。我怎樣才能計算我需要在一個表中的行,並只獲得這些結果?MySql orderBy和COUNT()

MySQL查詢

select 
    `inventory`.`on_sale`, 
    `inventory`.`id`, 
    `inventory`.`sku`, 
    `inventory`.`name`, 
    `inventory`.`price`, 
    `inventory_categories`.`category`, 
    `inventory`.`stock_quantity`, 
    COUNT(orders_product.sku) as skuCount 
from 
    `inventory` 
     left join 
    `orders_product` ON `orders_product`.`sku` = `inventory`.`sku` 
     left join 
    `inventory_categories` ON `inventory`.`sku` = `inventory_categories`.`sku` 
group by `inventory_categories`.`category` 
order by `skuCount` desc 
limit 10000 

這是很難表現出我所有的記錄,但它基本上是這樣的:

orders_product.sku = ORDER1234 & ORDER1234 & ORDER891010 

inventory_categories.(id)category = (cat1)ORDER1234 & (cat1a)ORDER1234 & (cat1b)ORDER1234 & (cat2)ORDER891010 

所以在我的表在我的表它的顯示skuCount = 5 & 2分別代替所需的結果2 & 1。如果我沒有這個inventory.id的訂單,那麼它顯示0這是正確的,但只要一個訂單通過,它就會計數該訂單加上與該sku相等的所有類別。

如果我從我的連接語句中刪除inventory_categories,它沒有問題。但是,查詢中需要記錄目的。

+0

剛剛加入未得到錯誤的結果計數 – 2014-08-27 17:27:06

+0

添加http://sqlfiddle.com/這是很難理解的表格和材料。 – DanFromGermany 2014-08-27 17:27:55

回答

1

如何以下查詢:

SELECT i.on_sale, i.id, i.sku, i.name, i.price, ic.category, i.stock_quantity, 
(
    SELECT COUNT(*) 
    FROM orders_product op 
    WHERE op.sku = i.sku 
) AS skuCount 
FROM inventory i 
LEFT JOIN inventory_categories ic ON i.sku = ic.sku 
ORDER BY skuCount DESC 
LIMIT 10000 
+0

看起來像這樣做。謝謝! – Lynx 2014-08-27 18:37:21

0
SELECT A.on_sale, a.id, a.sku,a.name,a.price, a.stock_Quantity, skucount, count(ic.category) as CatCount 
FROM 
(SELECT 
    `inventory`.`on_sale`, 
    `inventory`.`id`, 
    `inventory`.`sku`, 
    `inventory`.`name`, 
    `inventory`.`price`, 
    `inventory`.`stock_quantity`, 
    COUNT(orders_product.sku) as skuCount 
    FROM `inventory` 
    LEFT JOIN `orders_product` 
    ON `orders_product`.`sku` = `inventory`.`sku` 
    GROUP BY `inventory`.`on_sale`, `inventory`.`id`, 
    `inventory`.`sku`, `inventory`.`name`, 
    `inventory`.`price`, `inventory`.`stock_quantity`) A 
LEFT JOIN `inventory_categories` IC 
    ON `inventory`.`sku` = `inventory_categories`.`sku` 
GROUP BY A.on_sale, a.id, a.sku,a.name,a.price, a.stock_Quantity, skucount 
OREDER BY `skuCount` desc 
LIMIT 10000 

您必須首先獲取SKU計數結果集,然後加入表格。