0

したがって、顧客のリストがあり、顧客のリストがあります。

私は2つのテーブルを持っています、customersそしてinvoices

Customer_id私の顧客にとっても同じである可能性があります。

クライアントA

Customer #1

クライアントB

Customer #1

したがって、請求書テーブルには、さまざまな顧客のcustomer_idを1にすることができます。

以下のクエリは機能しますが、少し厄介なようです。それをきれいにするためのアイデアはありますか?

  SELECT   name, 
           sum(sub_total) total
    FROM   customers, invoices
   WHERE   customer_id = 1438 and 
           invoices.customer_id = 1438 and 
           customers.customer_id = invoices.customer_id 
GROUP BY   name 
Order By   total DESC;
4

3 に答える 3

4

もしそうならA = B、あなたはA = 1438それB = 1438をチェックする必要はありません...
(これで私を信じてください、私は高校で数学で60+を得ました)

SELECT   name, sum(sub_total) total    
FROM     customers, invoices    
WHERE    invoices.customer_id  = 1438
AND      customers.customer_id = invoices.customer_id 
GROUP BY name 
ORDER BY total DESC;

または、必要なJOINのタイプを明示的に指定します。

SELECT   name, sum(sub_total) total    
FROM     customers  INNER JOIN invoices 
ON       customers.customer_id = invoices.customer_id 
WHERE    invoices.customer_id  = 1438
GROUP BY name 
ORDER BY total DESC;
于 2012-05-14T00:33:28.240 に答える
1

追加のチェックは必要ありません...

SELECT name, sum(sub_total) total
FROM customers, invoices
WHERE 
customer_id = 1438 and 
customers.customer_id = invoices.customer_id 
GROUP BY name order by total DESC;
于 2012-05-14T00:32:45.810 に答える
1

名前でグループ化することは強くしません...「BillSmith」という名前の顧客が2人いるとしますが、1人は顧客ID 10で、もう1人は顧客ID785です...あなたはそれらを1人にまとめただけです。名前ではなく、IDでグループ化する必要があります...

とはいえ、とにかく単一の顧客IDのみをクエリしていて、単一のレコードのみを返すことになります。あなたが本当に達成しようとしているのがすべての顧客とそれぞれの請求書の全体を取得することである場合は、単一の顧客のwhere句を削除してください。IDでグループを保持できますが、実際の顧客の名前を表示します。同じ合計の顧客が複数いる場合は、名前でサブソートできますが、グループ化は顧客のIDのみに基づいて行われます。

SELECT
      c.name, 
      sum(i.sub_total) total
   FROM
      customers
         JOIN invoices
            on c.Customer_ID = i.Customer_ID
   GROUP BY
      c.customer_ID 
   Order By
      total DESC,
      c.Name
于 2012-05-14T02:01:58.433 に答える