Mysql
 sql >> база данни >  >> RDS >> Mysql

Преброяване на данни от множество таблици с помощта на SUM

Вместо да се присъедините към tbl_workers бихте могли да се присъедините към неговата незавъртена вариация, където position и position2 ще бъде в същата колона, но в различни редове.

Ето как може да изглежда премахването на завъртането:

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

Ето цялата заявка, която всъщност е вашата оригинална заявка, като горната заявка замества tbl_workers таблица:

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

АКТУАЛИЗАЦИЯ

Това е модифициран скрипт според допълнителна заявка в коментарите:

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

Идеята е да се замени 4 състояние в подизбора с 3 или 2 в зависимост от това дали в момента трябва да изтеглим position или position2 като унифицираната position . Външният избор продължава да използва същата логика както преди.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL изчисляване на кумулативна сума с условие за нулиране

  2. Съхраняване на кодирани в base64 данни като тип данни BLOB или TEXT

  3. Как да заключите mysql таблици в php

  4. MySQL Как да INSERT INTO [temp table] FROM [Stored Procedure]

  5. Конвертирайте fbk (firebird) файл в MySql