2012-04-29 58 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 
相关问题