Сомневайся с консультацией sql в продажах

Я должен реализовывать консультацию, которую делал бы dto 30 % в цене v из product с тем, который у нас есть больше благодеяние.

:

select 
    max(precioventa-precioproveedor) as beneficio
from 
    productos 
where 
    cantidadenstock > 0 
order by 
    beneficio desc 
limit 1;
1
задан 07.03.2019, 09:35
3 ответа

TambiГ©n ты можешь решать это с JOIN без того, чтобы он отпускал эту ОШИБКУ 1093, предотвращая asГ - процедуру и временную таблицу. Я присоединяю tambiГ©n cГіdigo, чтобы создавать таблицу и делать доказательство:

CREATE TABLE productos(
  id_producto int AUTO_INCREMENT,
  precioventa float,
  precioproveedor float,
  cantidadenstock int,
  PRIMARY KEY(id_producto)
  );
INSERT INTO productos (precioventa, precioproveedor, cantidadenstock) VALUES
  ('12','10','5'),
  ('15','11','6'),
  ('25','20','8');

    UPDATE productos JOIN (
        SELECT id_producto,precioventa*.7 nuevoprecioventa
          FROM productos WHERE precioventa-precioproveedor=(
            SELECT MAX(precioventa-precioproveedor) FROM productos
          ) 
      ) c1 USING(id_producto)
      SET precioventa=nuevoprecioventa;
0
ответ дан 02.12.2019, 05:59
  • 1
    у него нет случая делать scripts sql или algú n язык выполнимых backend aquí так как платформа не correrá ú nico, что, если он может выполнять, có я говорю html, css и js –   09.03.2019, 16:14
  • 2
    Правда состоит в том, что он вводил có я говорю así потому что с { } и этикетки pre и code он мне не шел, sí что это поражал немного выполнения. ¿ Có mo ты это ввел tú? –  David JP 09.03.2019, 17:34
  • 3
    Я думаю, что уже это у меня есть: я помечаю có я говорю и нажимаю Ctrl+k –  David JP 09.03.2019, 18:21

доказательство добавляя операцию precioventa - (precioventa*0.30) в твоей консультации

пример:

select 
    max(precioventa-precioproveedor) as beneficio
   ,precioventa-(precioventa*0.30) as descuento
from 
    productos 
where 
    cantidadenstock > 0 
group by precioventa,precioproveedor
order by 
    beneficio desc 
limit 1;
1
ответ дан 02.12.2019, 05:59
  • 1
    precioventa - (precioventa*0.30) = precioventa*0.70 ;) –  gbianchi♦ 06.03.2019, 21:20
  • 2
    Точно. @gbianchi –  Juan Carlos Hdz 06.03.2019, 21:29
  • 3
    только обменные max (precioventa) эксперт precioventa, precioventa - (precioventa*0.30) схвати скидку. я надеюсь понять –  Juan Carlos Hdz 06.03.2019, 21:40

Давайте идти по частям.

precioventa-precioproveedor не уверяет, что ни один продукт выполняет эту condiciГіn. Скорее могут быть многообразные продукты, которые выполняли бы это.

Тогда, проблема состоит в том, что твой update, он может делать это на более чем одной линии.

Доставая это разъяснение сверху, сначала мы получаем codigoproducto, которые выполняют это условие

select
    max(precioventa-precioproveedor) as beneficio
from 
    productos 
where 
    cantidadenstock > 0 
order by 
    beneficio desc 
limit 1;

, И мы используем этот query, чтобы делать следующая

select codigoproducto
from productos
where precioventa-precioproveedor = (
    select
        max(precioventa-precioproveedor) as beneficio
    from 
        productos 
    where 
        cantidadenstock > 0 
    order by 
        beneficio desc 
    limit 1;
)

Этот последний query, он возвращает все codigoproducto, которые истекают, с которым благодеяние - максимум.

И сейчас, мы применяем эту к update

update productos set precioventa=precioventa*0.7 
where codigoproducto in (
    select codigoproducto
    from productos
    where precioventa-precioproveedor = (
        select
            max(precioventa-precioproveedor) as beneficio
        from 
            productos 
        where 
            cantidadenstock > 0 
        order by 
            beneficio desc 
        limit 1;
    ));
0
ответ дан 02.12.2019, 05:59
  • 1
    и как объединенное совсем? Я чувствую вопросы, начинаюсь... и спасибо за помощь –  Victor 06.03.2019, 23:49
  • 2
    ОШИБКА 1093 (HY000): You can' t specify target table ' productos' for update in FROM clause –  Victor 07.03.2019, 00:03
  • 3
    Точно. You cannot update в table and select from the same table in в subquery. это говорит, что учебник. был бы нужен производить сейчас процедуру, которая читала бы коды, которые было нужно изменять, или посылать их во временную таблицу и отсюда обновлять. Уже ты знаешь то, что tenes, который делать. –  gbianchi♦ 07.03.2019, 01:10
  • 4
    ¿ Какая-то помощь? –  Victor 07.03.2019, 01:11
  • 5
    Это. Поспори, или как делать временную таблицу, или как делать хранившуюся процедуру. Если это упражнение для способности (он это не кажется), ты сможешь изучать много. Если это твоя работа, он рекомендовал бы тебе говорить с твоим начальником или тот, кто соответствует, объяснять ему проблему и aprendar, как они решают эти вещи, где ты работаешь. –  gbianchi♦ 07.03.2019, 01:12