Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Đếm dữ liệu từ nhiều bảng bằng SUM

Thay vì tham gia vào tbl_workers bạn có thể tham gia vào biến thể không được phân chia của nó ở vị trí positionposition2 sẽ ở trong cùng một cột nhưng ở các hàng khác nhau.

Đây là cách việc bỏ chia sẻ có thể trông như thế nào:

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

Đây là toàn bộ truy vấn, về cơ bản là truy vấn ban đầu của bạn với truy vấn ở trên thay thế cho tbl_workers bảng:

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

CẬP NHẬT

Đây là một tập lệnh được sửa đổi theo yêu cầu bổ sung trong nhận xét:

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

Ý tưởng là thay thế 4 trạng thái trong lựa chọn con với 3 hoặc 2 tùy thuộc vào việc chúng tôi hiện đang kéo position hoặc position2position hợp nhất . Lựa chọn bên ngoài tiếp tục sử dụng logic giống như trước đây.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tốt nhất để lưu trữ dữ liệu nhạy cảm trong MySQL là gì?

  2. SQL - Chuyển đổi định dạng ngày giờ

  3. tìm kiếm nếu một ngày kỷ niệm sắp tới trong MySql

  4. mySQL - Tạo một bảng mới bằng cách sử dụng dữ liệu và cột từ ba bảng

  5. Tạo một TRIGGER để tạo một TRIGGER khi một bảng được tạo