Конференция "Базы" » MySQL MAX() возвращает странное [MySQL]
 
  • megavoid © (15.11.13 05:09) [0]
    Имеется таблица в mysql:
    id weight
    1 1
    2 2
    3 3
    4 4

    Почему
    SELECT id, MAX(weight) FROM table

    возвращает 1-4, а не 4-4 ???

    Желаемого можно добиться так, но что с максом? Это потому, что он аггрегатная функция?
    SELECT id, MAX(weight) AS mw FROM table GROUP BY id ORDER BY mw DESC LIMIT 1;

  • sniknik © (15.11.13 07:54) [1]
    > возвращает 1-4, а не 4-4 ???
    потому что условие на выбор требуемых записей пишут в where, предназначено оно для этого, а не оставляют телепатически догадываться о нужном движку базы.
    вообще странно, что что-то вернуло, по первому запросу, такое смешение статического поля и агрегата в mssql например является ошибкой.
  • [ВладОшин] © (15.11.13 08:27) [2]
    а в O работает

    create table OW_tmp_tmp_tmp as
    select * from (
    select 1 iddqd, 1 idkfa from dual
    union all
    select 2 iddqd, 2 idkfa from dual
    union all
    select 3 iddqd, 3 idkfa from dual
    union all
    select 4 iddqd, 4 idkfa from dual
    )

    select * from (
    select iddqd, max(idkfa) idclip from OW_tmp_tmp_tmp
    group by iddqd ORDER BY idclip desc
    ) where rownum = 1
  • sniknik © (15.11.13 08:37) [3]
    имхо, менее "напряжно" будет такой вариант
    SELECT id, weight FROM table WHERE weight = (SELECT id, MAX(weight) FROM table)

    а может в mysql  возможна и запись и попроще
    SELECT id, weight FROM table WHERE weight = MAX(weight)

    > SELECT id, MAX(weight) AS mw FROM table GROUP BY id ORDER BY mw DESC LIMIT 1;
    тогда уж
    SELECT id, weight FROM table ORDER BY weight DESC LIMIT 1;
  • [ВладОшин] © (15.11.13 11:38) [4]

    > SELECT id, weight FROM table WHERE weight = (SELECT id,
    > MAX(weight) FROM table)

    именно такой работать не будет, боюсь :)


    > ELECT id, weight FROM table ORDER BY weight DESC LIMIT 1;

    логично
  • megavoid © (15.11.13 12:37) [5]
    Всем спасибо! В пять утра глаза упорно не хотели замечать group by в примере из документации.
    SELECT student_name, MIN(test_score), MAX(test_score) FROM student GROUP BY student_name;

  • sniknik © (15.11.13 13:12) [6]
    > именно такой работать не будет, боюсь :)
    опечатка, писал прямо в браузере id в под запросе естественно нужно убрать.
 
Конференция "Базы" » MySQL MAX() возвращает странное [MySQL]
Есть новые Нет новых   [134427   +38][b:0][p:0.001]