2012-04-29 59 views
1

我要選擇從表orderitems最爲購買的物品,然後讓這些項目的細節和排序DESC如何從兩張表中取出記錄以及計數?

我有它返回最購買的物品下面,但我無法弄清楚如何返回p_namep_price每個項(P_ID)的p_image_pathproducts

SELECT  p_id 
     , COUNT(p_id) AS p_id_count 
FROM  orderitem 
GROUP BY p_id 
ORDER BY p_id_count $direction 

我希望這是有道理的

回答

2
SELECT o.p_id, COUNT(o.p_id) AS p_id_count, p.p_name, p.p_price, p.p_image_path 
FROM orderitem o 
INNER JOIN products p ON o.p_id = p.p_id 
GROUP BY o.p_id 
ORDER BY p_id_count 
0
SELECT p_id, p_name, p_price, p_image_path, COUNT(p_id) AS p_id_count 
FROM orderitem 
inner join products p on p.id = p_id 
GROUP BY p_id 
ORDER BY p_id_count $direction 
0

呦你需要用orderitem表加入產品表。

SELECT p_id, p_name, p_price, COUNT(p_id) AS p_id_count 
    FROM orderitem 
    LEFT JOIN products ON (orderitem.p_id = products.id) 
    GROUP BY p_id, p_name, p_price 
    ORDER BY p_id_count $direction 
0
SELECT p_id, COUNT(p_id) AS p_id_count 
     FROM orderitem o, products p 
     WHERE o.p_id = p.p_id 
     GROUP BY p_id 
     ORDER BY p_id_count $direction 
1

我假設產品的主鍵是ID,並具有與OrderItem的的的p_id參考

SELECT o.p_id, COUNT(o.p_id) AS p_id_count, p.p_name,p.p_price,p.p_image_path 
     FROM orderitem o 
    INNER JOIN products p ON p.id = o.p_id 
     GROUP BY o.p_id 
     ORDER BY o.p_id_count $direction 
2

你必須使用INNER JOIN產品和之間 orderitem * p_id *字段中的表,因爲這是將兩個表綁定在一起的公共字段。 INNER JOIN將僅提取兩個表之間的匹配記錄。連接將匹配所有匹配的記錄,因爲ordereditem值已經按* p_id *列分組,您將看到來自產品表的所有唯一產品信息以及基於COUNT(p_id)信息輸出的順序計數。

Click here to view the demo at SQL Fiddle.

腳本

CREATE TABLE products 
(
    p_id   INT NOT NULL 
    , p_name   VARCHAR(20) NOT NULL 
    , p_image_path VARCHAR(255) NOT NULL 
); 

CREATE TABLE orderitem 
(
    orderid INT NOT NULL 
    , p_id INT NOT NULL 
); 

INSERT INTO products (p_id, p_name, p_image_path) VALUES 
    (1, 'product 1', '~\image 1'), 
    (2, 'product 2', '~\image 2'), 
    (3, 'product 3', '~\image 3'); 

INSERT INTO orderitem (orderid, p_id) VALUES 
    (1, 2), 
    (1, 1), 
    (1, 3), 
    (1, 2), 
    (1, 2), 
    (1, 1); 

SELECT  p.p_id 
     , p.p_name 
     , p.p_image_path 
     , COUNT(o.p_id) AS orderedcount 
FROM  products p 
INNER JOIN orderitem o 
ON   p.p_id = o.p_id 
GROUP BY p.p_id 
ORDER BY orderedcount DESC; 

輸出

P_ID P_NAME  P_IMAGE_PATH ORDEREDCOUNT 
---- ---------- ------------ ------------ 
2 product 2 ~image 2   3 
1 product 1 ~image 1   2 
3 product 3 ~image 3   1 
相關問題