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

Hitung data dari beberapa tabel menggunakan SUM

Alih-alih bergabung ke tbl_workers Anda dapat bergabung dengan variasi yang tidak dipilih di mana position dan position2 akan berada di kolom yang sama tetapi di baris yang berbeda.

Berikut adalah tampilan unpivoting:

SELECT
  w.id,
  w.name,
  CASE x.pos WHEN 1 THEN w.position ELSE w.position2 END AS position,
  w.status
FROM tbl_workers AS w
  CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x

Inilah keseluruhan kueri, yang pada dasarnya adalah kueri asli Anda dengan kueri di atas yang menggantikan tbl_workers tabel:

SELECT p.id, 
  p.position, 
  SUM(CASE w.Status WHEN 2 THEN 1 ELSE 0 END)  AS booked,
  SUM(CASE w.Status WHEN 3 THEN 1 ELSE 0 END)  AS placed
FROM tbl_positions AS p
  LEFT JOIN (
    SELECT
      w.id,
      w.name,
      CASE x.pos WHEN 1 THEN w.position ELSE w.position2 END AS position,
      w.status
    FROM tbl_workers AS w
      CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x
  ) AS w 
  ON w.position=p.id
GROUP BY p.id, p.position

PERBARUI

Ini adalah skrip yang dimodifikasi sesuai dengan permintaan tambahan di komentar:

SELECT p.id, 
  p.position, 
  SUM(CASE w.Status WHEN 2 THEN 1 ELSE 0 END)  AS booked,
  SUM(CASE w.Status WHEN 3 THEN 1 ELSE 0 END)  AS placed
FROM tbl_positions AS p
  LEFT JOIN (
    SELECT
      w.id,
      w.name,
      CASE x.pos WHEN 1 THEN w.position ELSE w.position2 END AS position,
      CASE w.status
        WHEN 4 THEN CASE x.pos WHEN 1 THEN 3 ELSE 2 END
        ELSE w.status
      END AS status
    FROM tbl_workers AS w
      CROSS JOIN (SELECT 1 AS pos UNION ALL SELECT 2) AS x
  ) AS w 
  ON w.position=p.id
GROUP BY p.id, p.position

Idenya adalah untuk menggantikan 4 status di subpilih dengan 3 atau 2 tergantung pada apakah kita sedang menarik position atau position2 sebagai position terpadu . Pilihan luar tetap menggunakan logika yang sama seperti sebelumnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mendapatkan daftar database?

  2. konvensi penamaan mysql

  3. MySQL mendapatkan pesan percakapan terbaru

  4. MySQL mengganti semua spasi putih dengan -

  5. dapatkan daftar sumber data ODBC di pc lokal menggunakan PHP