За последние 24 часа нас посетили 22778 программистов и 1237 роботов. Сейчас ищут 745 программистов ...

Сумма значений не уникального параметра...

Тема в разделе "MySQL", создана пользователем Naykon, 23 май 2019.

  1. Naykon

    Naykon Активный пользователь

    С нами с:
    15 ноя 2015
    Сообщения:
    65
    Симпатии:
    0
    Нужно посчитать "ккал"... есть фрукты нам нужно получить у какого фрукта больше всего "ккал" в таблице.. (В СУММЕ)

    Мы должны получить такой список (по порядку от большего к меньшему):

    1.Яблоко - 462+345+11+50 = 868
    2.банан - 11+700 = 711
    3.Клубника 555 = 555
    4.Хурма 12 = 12

    (НУЖНО ПОЛУЧИТЬ ТОЛЬКО СУММУ ВВЕРХУ САМОЕ БОЛЬШЕ ЗНАЧЕНИЕ)

    помогите пожалуйста отправить правильны{й\е} запрос чтоб получить что требуется.

    и еще 1 вопрос - Нужно получить какой по списку банан по сумме "ккал".
     

    Вложения:

    • admin_1.jpg
      admin_1.jpg
      Размер файла:
      61,3 КБ
      Просмотров:
      9
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    PHP:
    1. SELECT fruit, SUM(kkal)
    2. FROM `fruits`
    3. GROUP BY fruit
    4. ORDER BY 2 DESC
    5. LIMIT 1
     
  3. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
  4. Naykon

    Naykon Активный пользователь

    С нами с:
    15 ноя 2015
    Сообщения:
    65
    Симпатии:
    0
    SELECT @i := @i + 1 AS num, фрукт,SUM(ккал)
    FROM корзина, (select @i:=0) AS z
    GROUP BY фрукт ORDER BY MAX(ккал) DESC
    LIMIT 0, 10;

    в num столбце как будто случайные значения.. дайте пример правильного вывода и сортировки вывода ... господа мы совсем близки к цели)
     
  5. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    развивая ваш вариант

    PHP:
    1. SELECT cc.rank FROM (
    2.     SELECT @i:=@i+1 as rank, c.fruit
    3.     FROM (
    4.         SELECT fruit, SUM(kkal)
    5.         FROM `fruits`
    6.         GROUP BY fruit
    7.         ORDER BY 2 DESC
    8.     ) c
    9.     ,(select @i:=0) AS z
    10. ) cc
    11. WHERE cc.fruit='banan';
     
  6. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    для начала первый запрос:
    Код (Text):
    1. SET @i:=0;
    второй запрос:
    Код (Text):
    1. SELECT @i:=@i+1 num, fruit, SUM(kkal) sk FROM `fruits` GROUP BY `fruit` ORDER BY sk DESC
    если банан надо выбрать отдельно, то суём второй запрос в конструкцию FROM и добавляем условие на банан
     
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    таким образом, посчитается неправильно, ибо num будет вычисляться ДО сортировки по сумме.
     
  8. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    SELECT * FROM (
    SELECT @i:=@i+1 num, fruit, SUM(kkal) sk FROM `fruits` GROUP BY `fruit` ORDER BY sk DESC
    ) c WHERE c.fruit = 'банан';
     
  9. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    @Valick , ещё один неправильный запрос.
    ты что пытаешься им посчитать?
     
  10. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @runcore, просто запусти и увидишь
     
  11. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    а ты попробуй чтото кроме банана )))
     
  12. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @runcore, согласен, будет время дома посмотрю :) просто неудачно совпало
     
  13. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
  14. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    я извращенец)
    Код (Text):
    1. SET @i:=0;
    2. SELECT cc.* FROM (
    3. SELECT  @i:=@i+1 num, c.* FROM (
    4. SELECT fruit, SUM(kkal) sk FROM `fruits` GROUP BY `fruit` ORDER BY sk DESC
    5.     ) c ) cc WHERE cc.fruit = 'банан';
     
  15. Naykon

    Naykon Активный пользователь

    С нами с:
    15 ноя 2015
    Сообщения:
    65
    Симпатии:
    0
    SELECT @i := @i + 1 AS num, фрукт, summ
    FROM ( SELECT фрукт, SUM(ккал) summ, MAX(ккал) maxx
    FROM корзина
    GROUP BY фрукт
    ORDER BY MAX(ккал) DESC
    LIMIT 0, 10 ) x,
    ( SELECT @i:=0) z
    ORDER BY maxx DESC

    сортировка summ должны быть по убыванию..

    [U:1:857132995] - это представим что один из фруктов.. и остальное тоже..

    1 [U:1:857132995] 3212
    2 [U:1:883969910] 3594
    3 [U:1:216043827] 4807 - это самое большое число..
    4 [U:1:232151095] 2098
    5 [U:1:147049989] 1432
    6 [U:1:894988104] 1216
    7 [U:1:871774431] 764
    8 [U:1:35551385] 1228
    9 [U:1:85769023] 546
    10 [U:1:413185576] 368

    Нужно чтоб было все по убыванию...
     
  16. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Naykon, я кому запрос писал?
     
  17. Naykon

    Naykon Активный пользователь

    С нами с:
    15 ноя 2015
    Сообщения:
    65
    Симпатии:
    0
    вы много что написали что я и не догнал какое решение на ваш взгляд лучше, продублируйте пожалуйста.
    --- Добавлено ---
    SET @i:=0;
    SELECT @i:=@i+1 num, steamid, SUM(cmd_time) sk FROM `227_27015` GROUP BY `steamid` ORDER BY sk DESC

    Работает но нумерация все равно не правильная....

    110 [U:1:216043827] 4807
    57 [U:1:883969910] 3594
    95 [U:1:857132995] 3212
    36 [U:1:232151095] 2098
    93 [U:1:147049989] 1877
    30 [U:1:871774431] 1332
    35 [U:1:35551385] 1228
    88 [U:1:894988104] 1216
    20 [U:1:75847262] 1101
    161 [U:1:293827067] 685
    176 [U:1:2105087] 610
    10 [U:1:85769023] 546
    194 [U:1:325646804] 484
     
  18. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    SET @i:=0;
    SELECT @i:=@i+1 num, c.* FROM (SELECT fruit, SUM(kkal) sk FROM `fruits` GROUP BY `fruit` ORDER BY sk DESC ) c
    вот так должно работать, лимит если нужен внутри добавь
     
  19. Naykon

    Naykon Активный пользователь

    С нами с:
    15 ноя 2015
    Сообщения:
    65
    Симпатии:
    0
    SELECTcc.*
    FROM(

    SELECT @i := @i +1 num, c . *
    FROM (

    SELECT steamid, SUM( cmd_time ) sk
    FROM `227_27015`
    GROUP BY `steamid`
    ORDER BY sk DESC
    )c)cc
    WHEREcc.steamid='[U:1:871774431]'

    тут что-то работает только пока непонятно что...

    cmd_time (это ккал в примере) .. (steamid - это фрукт) 227_27015 - это название таблицы...

    Нужно сначала получить первые 10 лучших значений ... как это сделать пока нет решения.. все работают не корректно..
    --- Добавлено ---
    не корректно работает ... нужно еще и ссумировать все значения выбранного ключа... fruit (яблок много) калории у каждого разные .. эти калории нужно проссумировать и на основе суммы уже стоит список..
     
  20. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    я думал у нас еще есть время... оказывается ОНИ УЖЕ ЗДЕСЬ
    если давать такие 227_27015 имена таблицам и если хранить такие [U:1:871774431] значения, то естественным образом через некоторое время станет "ничего непонятно", а потом и вовсе не иначе как с заклинаниями код писать
    крепяй дамп таблицы сюды, база то хоть MySQL?
     
  21. Naykon

    Naykon Активный пользователь

    С нами с:
    15 ноя 2015
    Сообщения:
    65
    Симпатии:
    0
    А вы думали БД для того чтоб бананы да яблоки считать? разумеется будут данные различного виде - это не имеет никакого значения! Рения корректноко к сожалению нет(
     
  22. Naykon

    Naykon Активный пользователь

    С нами с:
    15 ноя 2015
    Сообщения:
    65
    Симпатии:
    0
    Позвольте я вам еще 1 раз обозначу задачу на примере .. дам пример как выглядит таблица сама по себе и дам пример какой нам нужен вывод..

    Таблица сама по себе выглядит так:
    steamid cmd_time
    [U:1:456] 90
    [U:1:123] 40
    [U:1:234] 200
    [U:1:234] 20
    [U:1:345] 84
    [U:1:456] 30
    [U:1:123] 40

    Вывод должен быть таким:
    1. [U:1:234] 220
    2. [U:1:456] 120
    3. [U:1:345] 84
    4. [U:1:123] 80

    Боже дай мне ума а вам терпения xD))))
     
  23. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Зачем порядковые номера? Если они только для вывода, то они присваиваются... правильно, при выводе.