3

以下のスキーマについては、このレポートを取得する必要があります

これは私が持っているものです

select c.name, sr.name, count(o.order_id)
from contact c 
INNER JOIN accounts a
ON c.account_id=a.account_id
INNER JOIN sales_reps sr 
ON a.sales_rep_id =sr.sales_rep_id
INNER JOIN orders o
ON a.account_id =o.account_id
where o.order_id in (
    select SUM(oi.quantity*p.price) from 
    order_items oi INNER JOIN parts p
    on oi.part_id =p.part_id
)
group by a.account_id, c.name

しかし、これでは結果が得られません。

助けてください。

4

3 に答える 3

3

where条件が正しくない場合、order_idはどのように合計に等しくなりますか?

以下をお試しください:

select 
    c.name, sr.name, COUNT(o.order_id), SUM(op.order_total)
FROM 
    contact c 
INNER JOIN 
    accounts a ON c.account_id = a.account_id
INNER JOIN 
    sales_reps sr ON a.sales_rep_id = sr.sales_rep_id
INNER JOIN 
    orders o ON a.account_id = o.account_id
INNER JOIN 
  (SELECT 
      oi.order_id, SUM(oi.quantity * p.price) AS order_total
  FROM 
      order_items oi 
  INNER JOIN 
      parts p ON oi.part_id = p.part_id 
  GROUP BY 
      oi.order_id
  ) op ON o.order_id = op.order_id
WHERE o.delivery_data >= CURDATE()
GROUP by c.contact_id
于 2012-08-24T03:00:27.520 に答える
3

WHERE ... IN SELECTは、キーと等しくない(ほとんどの場合)、またはせいぜい正しくないsum()値を返すクエリに基づいているため、結果は得られません。小数の精度(通常)を持つ数量と価格では、それが一致する可能性は低くなります...

クエリを入れ替えて、問題の特定の日付内の注文を事前に認定し、合計します...その後、参加して休憩します...

select
         c.name, 
         sr.name,
         PreQualified.NumberOrders,
         PreQualified.OrderTotal
      from
         ( select 
                 o.Account_ID,
                 count( distinct o.order_id ) as NumberOrders,
                 sum( oi.quantity * p.price ) as OrderTotal
              from 
                 orders o
                    join order_items oi
                       on o.order_id = oi.order_id
                       join parts p
                          on oi.part_id = p.part_id
              where
                 o.Delivery_Date >= CURDATE()
              group by
                 o.Account_ID ) as PreQualified
            JOIN Accounts a
               on PreQualified.Account_ID = a.Account_ID
               Join Contact C
                  on a.Account_ID = c.Account_ID
            JOIN Sales_Reps sr
               ON a.sales_rep_id = sr.sales_rep_id 
于 2012-08-24T02:52:28.117 に答える
0

レコードをカウントしたい場合は、

count(*)

それ以外の

count(o.order_id)
于 2012-08-24T02:48:58.740 に答える