2

こんな問い合わせがあります

SELECT o.product_id,
       p.name,
       count(o.product_id) AS total_products_sold,
       (SELECT count(o.id)
        FROM ebay.`order` o) AS total_orders
FROM ebay.`order` o
INNER JOIN product p ON o.product_id = p.id
GROUP BY o.product_id

total_orders は、私が望んでいないそれぞれに対して実行されると再実行されます。私

質問:

total_orders を外側のクエリからのすべての結果セットと組み合わせる必要があります。

これを試しましたが、1行しか返されません

SELECT tps.product_id,
       tps.name,
       tps.total_products_sold,
       count(oo.id) AS total_orders
FROM ebay.`order` oo
INNER JOIN
  ( SELECT o.id,
           o.product_id,
           p.name,
           count(o.product_id) AS total_products_sold
   FROM ebay.`order` o
   INNER JOIN product p ON o.product_id = p.id
   GROUP BY o.product_id ) AS tps ON oo.product_id = tps.product_id

より良い解決策はありますか?

ありがとう。

4

2 に答える 2

2

with rollup実際のクエリを変更せずに合計を取得する which を使用できます。すべての行の列に結果が表示されるわけではありませんが、最後の行に合計注文の結果が表示されます。

SELECT 
  o.product_id,
  p.name,
  count(distinct o.id) AS totalorder
FROM 
  ebay.`order` o
INNER JOIN 
  product p 
ON 
  o.product_id = p.id
GROUP BY 
  o.product_id
WITH ROLLUP

例えば

+-----------+------+------------+
| product_id| name | totalorder |
+-----------+------+------------+
|      2000 |   A  |     10     |
|      2001 |   B  |     20     |
|      NULL | NULL |     30     |   <--- Last row is having the Total order 
+-----------+------+------------+

ロールアップあり

于 2013-04-09T07:54:09.713 に答える
1
SELECT  tps.product_id,
        tps.name,
        tps.total_products_sold,
        s.total_orders
FROM    ebay.`order` oo
        INNER JOIN
        ( 
            SELECT  o.id,
                    o.product_id,
                    p.name,
                    count(o.product_id) AS total_products_sold
            FROM    ebay.`order` o
                    INNER JOIN product p 
                        ON o.product_id = p.id
            GROUP   BY o.product_id 
        ) AS tps ON oo.product_id = tps.product_id
        CROSS JOIN
        (
            SELECT  count(id) total_orders
            FROM    ebay.`order`
        ) s
于 2013-04-09T07:48:07.210 に答える