1

Тема: 'Unknown column Total_Price in 'field list''. (MySQL)

Хочу реалізувати перехресний запит, щоб зліва було 'Найменування товару'(Full_Name), зверху були квартали 2005 року, а на перехресті Вартість(Total_Price). Але видає помилку: 'Unknown column Total_Price in 'field list''. Як мені зробити мій Total_Price видимим?

select concat(name_tov, ' ', name_typu_tovariv) as Full_Name,
case
    when quantity <= 20
        then format(quantity*1.3*s_tov,3)
    when quantity > 20
        then format((s_tov+1.28)*quantity,3)
end as Total_Price,   
sum(if(month(date) = 01 or month(date) = 02 or month(date) = 03, Total_Price, 0)) as '1 квартал 2005',
sum(if(month(date) = 04 or month(date) = 05 or month(date) = 06, Total_Price, 0)) as '2 квартал 2005',
sum(if(month(date) = 07 or month(date) = 08 or month(date) = 09, Total_Price, 0)) as '3 квартал 2005',
sum(if(month(date) = 10 or month(date) = 11 or month(date) = 12, Total_Price, 0)) as '4 квартал 2005'
from table3, table5, table1, table2
where table1.kod_tov = table3.kod_tov
and table3.nom_pres = table5.nom_pres
and table2.kod_typu_tovariv = table3.kod_typu_tov
group by Full_Name;

2 Востаннє редагувалося frz (28.10.2021 21:44:20)

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

Наведений приклад не дає можливості заранити в себе і побачити результат, бо невідома структура таблиць table3, table5, table1, table2. Однак все ж деякий "діагноз відповідно до групової фотографії з першого класу" можливий. Отже, пропоную використати subquery:

select t.Full_Name, t.Total_Price, t.'1 квартал 2005', t.'2 квартал 2005', t.'3 квартал 2005', t.'4 квартал 2005' 
from (
select concat(name_tov, ' ', name_typu_tovariv) as Full_Name,
case
    when quantity <= 20
        then format(quantity*1.3*s_tov,3)
    when quantity > 20
        then format((s_tov+1.28)*quantity,3)
end as Total_Price,   
sum(if(month(date) = 01 or month(date) = 02 or month(date) = 03, Total_Price, 0)) as '1 квартал 2005',
sum(if(month(date) = 04 or month(date) = 05 or month(date) = 06, Total_Price, 0)) as '2 квартал 2005',
sum(if(month(date) = 07 or month(date) = 08 or month(date) = 09, Total_Price, 0)) as '3 квартал 2005',
sum(if(month(date) = 10 or month(date) = 11 or month(date) = 12, Total_Price, 0)) as '4 квартал 2005'
from table3, table5, table1, table2
where table1.kod_tov = table3.kod_tov
and table3.nom_pres = table5.nom_pres
and table2.kod_typu_tovariv = table3.kod_typu_tov
group by Full_Name ) as t

Наведена вище помилка виникає через те, що Total_Price це лише аліас, а тепер це буде існуюча колонка в subquery.
Пробуйте. Наступного разу, якщо хочете змістовну відповідь протестовану спершу локально перед публікацією, надайте DDL кожної використаної таблиці (бажано також із декількома стрічками тестових даних).

3

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

Пише про помилку

4

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

https://replace.org.ua/uploads/images/7111/e0a6f98cd460953bb4e07cfb163e6161.png

5

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

А ось так?

select Full_Name, Total_Price, '1 квартал 2005', '2 квартал 2005', '3 квартал 2005', '4 квартал 2005' 
from (
select concat(name_tov, ' ', name_typu_tovariv) as Full_Name,
case
    when quantity <= 20
        then format(quantity*1.3*s_tov,3)
    when quantity > 20
        then format((s_tov+1.28)*quantity,3)
end as Total_Price,   
sum(if(month(date) = 01 or month(date) = 02 or month(date) = 03, Total_Price, 0)) as '1 квартал 2005',
sum(if(month(date) = 04 or month(date) = 05 or month(date) = 06, Total_Price, 0)) as '2 квартал 2005',
sum(if(month(date) = 07 or month(date) = 08 or month(date) = 09, Total_Price, 0)) as '3 квартал 2005',
sum(if(month(date) = 10 or month(date) = 11 or month(date) = 12, Total_Price, 0)) as '4 квартал 2005'
from table3, table5, table1, table2
where table1.kod_tov = table3.kod_tov
and table3.nom_pres = table5.nom_pres
and table2.kod_typu_tovariv = table3.kod_typu_tov
group by Full_Name ) as lineitems

6

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

Пише те саме: 'Unknown column Total_Price in 'field list''.

7

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

Вивід даних повинен мати такий вигляд. Де вартість має обраховуватися згідно тих умов які є в 'case'. Можливо такий вивід можна якось по іншому організувати?
https://replace.org.ua/uploads/images/7111/f7a8be6496f221b3f84ceef6b7cc8589.png

8 Востаннє редагувалося fed_lviv (28.10.2021 22:57:47)

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

frz написав:

...бо невідома структура таблиць table3, table5, table1, table2....
...якщо хочете змістовну відповідь протестовану спершу локально перед публікацією, надайте DDL кожної використаної таблиці (бажано також із декількома стрічками тестових даних)...

+++

frz написав:

... пропоную використати subquery...

+++

...
case
    when quantity <= 20
        then format(quantity*1.3*s_tov,3)
    when quantity > 20
        then format((s_tov+1.28)*quantity,3)
end as Total_Price,   
sum(if(month(date) = 01 or month(date) = 02 or month(date) = 03, Total_Price, 0)) as '1 квартал 2005',
...

ALIAS !!!

P.S. Problems with Column Aliases -> https://dev.mysql.com/doc/refman/8.0/en … alias.html

Подякували: Mirek70981

9

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

Я можу надати DDL кожної таблиці, тільки скажіть як?

10

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

тю, точно... ну я підозрював що річ в аліасі, але не додивився до кінця, як завжди додаткова пара очей лише на користь

sum(if(month(date) = 01 or month(date) = 02 or month(date) = 03, Total_Price,

тобто в даному сегменті коду замість аліасу Total_Price потрібно знову написати весь case when ... end

11

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

Total_Price(Вартість) це має бути змінна яка обраховується в залежності від умови

12 Востаннє редагувалося frz (28.10.2021 23:01:26)

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

ось натайпав замість аліаса весь case when ... end - пробуйте

select concat(name_tov, ' ', name_typu_tovariv) as Full_Name,
case
    when quantity <= 20
        then format(quantity*1.3*s_tov,3)
    when quantity > 20
        then format((s_tov+1.28)*quantity,3)
end as Total_Price,   
sum(if(month(date) = 01 or month(date) = 02 or month(date) = 03, case
    when quantity <= 20
        then format(quantity*1.3*s_tov,3)
    when quantity > 20
        then format((s_tov+1.28)*quantity,3)
end, 0)) as '1 квартал 2005',
sum(if(month(date) = 04 or month(date) = 05 or month(date) = 06, case
    when quantity <= 20
        then format(quantity*1.3*s_tov,3)
    when quantity > 20
        then format((s_tov+1.28)*quantity,3)
end, 0)) as '2 квартал 2005',
sum(if(month(date) = 07 or month(date) = 08 or month(date) = 09, case
    when quantity <= 20
        then format(quantity*1.3*s_tov,3)
    when quantity > 20
        then format((s_tov+1.28)*quantity,3)
end, 0)) as '3 квартал 2005',
sum(if(month(date) = 10 or month(date) = 11 or month(date) = 12, case
    when quantity <= 20
        then format(quantity*1.3*s_tov,3)
    when quantity > 20
        then format((s_tov+1.28)*quantity,3)
end, 0)) as '4 квартал 2005'
from table3, table5, table1, table2
where table1.kod_tov = table3.kod_tov
and table3.nom_pres = table5.nom_pres
and table2.kod_typu_tovariv = table3.kod_typu_tov
group by Full_Name

підозрюю, що цього разу буде помилка щодо group by, однак так як не надано DDL, то доведеться вам попрацювати компілятором для нашої а(в/у)диторії аби ми змогли вам допомогти.

13

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

Mirek7098 написав:

Я можу надати DDL кожної таблиці, тільки скажіть як?

SHOW CREATE TABLE my_table_name

14

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

https://replace.org.ua/uploads/images/7111/f9aab915e0dd06b3ffcaf121222a3e02.png
Дякую, все працює. Але я стовпець Total_Price видалю. Він мені не потрібен.
https://replace.org.ua/uploads/images/7111/e7c04aadbc08d74f7f4dcfdf2779f485.png
Ось так значно краще

15

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

Так можна ж підзапитом, головне - не питати одночасно поле і його агрегат, тобто

SELECT x, SUM(x)

очевидно не спрацює (а як він мав би?). Викиньте Total_Price з першого SELECT.

Подякували: Mirek70981

16

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

Таки лікування відповідно до групової фотографії з першого класу можливе.

17

Re: 'Unknown column Total_Price in 'field list''. (MySQL)

Прибрав функцію format(вона мені некоректні значення давала) і останній стовпець
https://replace.org.ua/uploads/images/7111/8eb6b2806a8c0634c437ccae3af173c6.png
Тепер все ідеально. Дякую