#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. Это работает?