Нужна помощь для суммирования данных в MySQL

#mysql #aggregate

#mysql #aggregate

Вопрос:

Мне нужна ваша помощь, чтобы решить мою проблему. Я хочу SUM получить некоторые данные, которые имеют одинаковое условие.

Это мои данные:

 Line    Model    Serial   Lot_no      Range
1       BO       0001     001A        096x0001-096x0100
1       BO       0002     001A        096x0001-096x0100
1       BO       0101     001A        096x0101-096x0200
1       BO       0202     001A        096X0201-096X0203
  

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

                     SELECT A.Line, A.Model,
                           A.Lot_no,B.Lot_Quantity,
                           IF(RIGHT(A.Range_sampling,4)='0000',10000,
                           RIGHT(A.Range_sampling,4))-MID(Range_sampling,5,4) 1 
                           AS Merchandise
                    FROM inspection_report A
                    LEFT JOIN prod_sch B
                    ON A.Line= B.Line_Name AND A.Model = B.Model_Code 
                    AND A.Lot_no= CONCAT(LPAD(CAST(B.Lot_No_ AS CHAR),3,'0'),'A')
                    GROUP BY A.Line, A.Model,A.Range_sampling
  

Затем я получаю результат, подобный:

 Line    Model     LOt_no     Lot_Quantity    Merchandise
1       BO        001A       300             100   //from 096X0001-096X0100
1       BO        001A       300             100   //from 096X0101-096X0200
1       BO        001A       300             3     //from 096X0201-096X0203
  

Как я должен сделать, чтобы результат выглядел:

 Line    Model      Lot_no      Lot_Quantity     Merchandise
1       BO         001A        300              203
  

Ответ №1:

Похоже, вы хотите агрегировать данные, поэтому вам нужно сгруппировать по всему, что не суммируется. Вам также нужно удалить A.Range_sampling и заменить его любыми производными полями, по которым вы хотите сгруппировать. IIRC правильно, MySQL не позволит вам использовать псевдоним в group by.

 SELECT  Line,Model,Lot_no, Lot_Quantity, SUM(Merchandise) FROM (
                SELECT A.Line, A.Model,
                       A.Lot_no,B.Lot_Quantity,
                       IF(RIGHT(A.Range_sampling,4)='0000',10000,
                       RIGHT(A.Range_sampling,4))-MID(Range_sampling,5,4) 1 
                       AS Merchandise
                FROM inspection_report A
                LEFT JOIN prod_sch B
                ON A.Line= B.Line_Name AND A.Model = B.Model_Code 
                AND A.Lot_no= CONCAT(LPAD(CAST(B.Lot_No_ AS CHAR),3,'0'),'A')

          )
          GROUP BY Line,Model,Lot_no, Lot_Quantity
  

РЕДАКТИРОВАТЬ Это может быть немного чище

Комментарии:

1. я все еще получаю отдельный результат.

2. Сначала попробуйте выполнить простой запрос, например, ВЫБЕРИТЕ A.Line, SUM(ПРИВЕДЕНИЕ(ВПРАВО(A.Range_sampling,4))-MID(Range_sampling,5,4) 1 КАК INT)) ГРУППИРОВАТЬ По A.Line. Это работает?