Объединение запросов MySQL дает неверный ответ - PullRequest
0 голосов
/ 10 февраля 2011

ОК, поэтому у нас есть много данных о продажах для каждого из наших клиентов.Мне было легко найти запрос, чтобы получить общий объем продаж для каждого торгового представителя, используя простой запрос:

SELECT  `MerchantAddresses`.`Rep Number` AS `Rep Number`,
          SUM(`RESIDUALS_2010_12`.`Qual Cr Vol` + `RESIDUALS_2010_12`.`Qual Ch Vol`) AS `VOL_2010_12`,
          `Reps`.`First` AS `First`,
          `Reps`.`Last` AS `Last`
FROM     `MerchantAddresses`, `RESIDUALS_2010_12`, `Reps`
WHERE   `RESIDUALS_2010_12`.`MID` = `MerchantAddresses`.`MID` AND
          `Reps`.`ID` = `MerchantAddresses`.`Rep Number`
GROUP BY    `MerchantAddresses`.`Rep Number`
ORDER BY SUM(`RESIDUALS_2010_12`.`Qual Cr Vol` + `RESIDUALS_2010_12`.`Qual Ch Vol`) DESC

Этот код работает совершенно нормально, возвращая таблицу, в которой указаны общие продажи по торговым представителям дляодин месяцНа данный момент мы выполняем три отдельных запроса, чтобы получить данные о продажах за 3 месяца.Я хочу объединить эти три запроса в один.

Итак, я сделал следующее:

SELECT  `MerchantAddresses`.`Rep Number` AS `Rep Number`,
          SUM(`RESIDUALS_2010_12`.`Qual Cr Vol` + `RESIDUALS_2010_12`.`Qual Ch Vol`) AS `VOL_2010_12`,
          SUM(`RESIDUALS_2010_11`.`Qual Cr Vol` + `RESIDUALS_2010_11`.`Qual Ch Vol`) AS `VOL_2010_11`,
          SUM(`RESIDUALS_2010_10`.`Qual Cr Vol` + `RESIDUALS_2010_10`.`Qual Ch Vol`) AS `VOL_2010_10`,
          `Reps`.`First` AS `First`,
          `Reps`.`Last` AS `Last`
FROM     `MerchantAddresses`, `RESIDUALS_2010_12` JOIN ON `RESIDUALS_2010_11` JOIN ON `RESIDUALS_2010_10`, `Reps`
WHERE   `RESIDUALS_2010_12`.`MID` = `MerchantAddresses`.`MID` AND
          `RESIDUALS_2010_11`.`MID` = `MerchantAddresses`.`MID` AND
          `RESIDUALS_2010_10`.`MID` = `MerchantAddresses`.`MID` AND
          `Reps`.`ID` = `MerchantAddresses`.`Rep Number`
GROUP BY  `MerchantAddresses`.`Rep Number`
ORDER BY SUM(`RESIDUALS_2010_12`.`Qual Cr Vol` + `RESIDUALS_2010_12`.`Qual Ch Vol`) DESC

Я обнаружил, что на самом деле я получаю неправильные значения с этим запросом.Это работает, но объемное значение, которое я получаю для каждого торгового представителя, на самом деле слишком мало ...

Есть идеи?Спасибо!

1 Ответ

1 голос
/ 10 февраля 2011

Я думаю, что вы не можете просто присоединиться к этим ежемесячным таблицам, потому что они на самом деле не связаны таким образом.У них один и тот же адрес продавца, но это все.

Используя UNION ALL, вы можете объединить результаты нескольких запросов.Таким образом, вы можете получить значение всех ежемесячных записей в подзапросе и суммировать их в родительском.

Я позволил себе добавить псевдонимы в ваши запросы.

SELECT
  m.`Rep Number`,
  SUM(m.vol10) as VOL_2010_10,
  SUM(m.vol11) as VOL_2010_11,
  SUM(m.vol12) as VOL_2010_12,
  m.First,
  m.Last
FROM  
  (
  SELECT  
    ma.`Rep Number`,
    r10.`Qual Cr Vol` + r10.`Qual Ch Vol` AS vol10,
    null as vol11,
    null as vol12
  FROM
    MerchantAddresses ma
    INNER JOIN RESIDUALS_2010_10 as r10 on r10.MID = ma.MID
  UNION ALL
  SELECT  
    ma.`Rep Number`,
    null as vol10,
    r11.`Qual Cr Vol` + r11.`Qual Ch Vol` AS vol11,
    null as vol12
  FROM
    MerchantAddresses ma
    INNER JOIN RESIDUALS_2010_11 as r11 on r11.MID = ma.MID
  UNION ALL 
  SELECT  
    ma.`Rep Number`,
    null as vol10,
    null as vol11,
    r12.`Qual Cr Vol` + r12.`Qual Ch Vol` AS vol12
  FROM
    MerchantAddresses ma
    INNER JOIN RESIDUALS_2010_12 as r12 on r12.MID = ma.MID
  ) m
  INNER JOIN Reps r ON r.ID = m.`Rep Number`
GROUP BY
  m.`Rep Number`
ORDER BY 
  SUM(m.vol12) DESC
...