1

テーブルから最も購入したアイテムを選択し、orderitemsそれらのアイテムの詳細を取得してDESCを並べ替えたい

最も購入されたアイテムを返す次のものがありますが、テーブルから各アイテム(p_id)のとp_name p_priceを返す方法がわかりません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

これが理にかなっているといいのですが

4

6 に答える 6

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 
于 2012-04-29T13:46:40.193 に答える
2

* p_id *フィールドは、両方のテーブルを結ぶ共通のフィールドであるため、製品orderitemINNER JOINテーブルの間で使用する必要があります。2つのテーブル間で一致するレコードのみをフェッチします。結合は一致するすべてのレコードと一致します。ordereditem値はすでに*p_id*列でグループ化されているため、COUNT(p_id)情報の出力に基づく注文数とともに、製品テーブルからのすべての一意の製品情報が表示されます。INNER JOIN

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
于 2012-04-29T13:53:21.993 に答える
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
于 2012-04-29T13:51:34.010 に答える
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
于 2012-04-29T13:45:56.507 に答える
0

productsテーブルを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
于 2012-04-29T13:46:26.807 に答える
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
于 2012-04-29T13:46:44.150 に答える