Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL INNER JOIN dari 3 tabel dengan hitungan dan total

Karena pesanan ditautkan ke perusahaan melalui pelanggan, saya rasa Anda tidak perlu melakukan dua subkueri terpisah dan bergabung dengan mereka; sebaliknya, saya pikir Anda bisa menulis:

SELECT companies.company AS "Company",
       IFNULL(COUNT(DISTINCT companies_customers.customer_id), 0) AS "Total Customers",
       IFNULL(SUM(orders.amount), 0) AS "All Orders Total"
  FROM companies
  LEFT
  JOIN companies_customers
    ON companies_customers.company_id = companies.id
  LEFT
  JOIN orders
    ON orders.customer_id = companies_customers.customer_id
 GROUP
    BY companies.id
;

Diedit untuk menambahkan: Yang mengatakan, saya harus mengatakan bahwa skema itu tidak masuk akal bagi saya. Anda memiliki hubungan banyak-ke-banyak antara pelanggan dan perusahaan — jadi, misalnya, John Smith adalah pelanggan Acme Widget Company dan dari Intrepid Inc. — tetapi pesanan hanyalah milik pelanggan, bukan dari perusahaan. Ini berarti bahwa jika pesanan milik John Smith , maka itu pasti milik keduanya ke Acme Widget Company dan ke Intrepid Inc. . Saya tidak berpikir itu bisa benar. Alih-alih memiliki customer_id bidang, saya pikir orders harus memiliki companies_customers_id lapangan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Peringkat MySQL dalam Kasus Ikatan

  2. Mysqldump' tidak dikenali sebagai program yang dapat dioperasikan perintah internal atau eksternal atau file batch

  3. Mengonversi kueri SQL kompleks ke SQLAlchemy

  4. GPL dan libmysqlclient

  5. MySQL mendapatkan semua baris yang terpengaruh untuk beberapa pernyataan dalam satu kueri