Найти на форуме:
Loading




+ Ответить в теме
Показано с 1 по 10 из 10

Тема: Помогите с SQL запросом

Комбинированный просмотр

  1. #1
    Новичок psixoz Странник Аватар для psixoz

    Регистрация
    20.06.2008
    Сообщений
    16
    Сказал(а) спасибо
    6
    Поблагодарили 16 раз(а) в 7 сообщениях

    Лампочка Помогите с SQL запросом

    Есть таблица:
    A | B
    10 | 20
    40 | 10
    50 | 60
    40 | 20
    Нужно получить:
    A
    10
    10
    50
    20
    Тобишь выбрать минимальное из 2х значений в строке

    Все на что меня хватило это:
    Код:
    select A from TABLE where A<B
    union
    select B from TABLE where B<A
    
    Но преподователя это не устраивает)
    Как еще можно задать этот запрос?..

  2. #2
    Программер blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда

    Регистрация
    20.09.2006
    Адрес
    слушаю Русский Рок на online.fm
    Сообщений
    2,629
    Сказал(а) спасибо
    387
    Поблагодарили 2,320 раз(а) в 724 сообщениях

    По умолчанию

    правильно не устраивает, бо твой запрос вернет 10,50,10,20, а не заданное 10,10,50,20.
    почитай про функции в mysql http://dev.mysql.com/doc/refman/5.0/...mmary-ref.html
    там ответ

  3. #3
    Единственное, что нужно для триумфа зла, это чтобы хорошие люди ничего не делали. © Эдмунд Бёрк oldengremlin отключил(а) отображение уровня репутации Аватар для oldengremlin

    Регистрация
    02.10.2008
    Адрес
    Киев
    Сообщений
    10,896
    Сказал(а) спасибо
    5,935
    Поблагодарили 12,477 раз(а) в 4,512 сообщениях
    Записей в дневнике
    14
    Изображения
    10

    По умолчанию

    Цитата Сообщение от blex Посмотреть сообщение
    правильно не устраивает, бо твой запрос вернет 10,50,10,20, а не заданное 10,10,50,20.
    Код:
    mysql> select a from t where a<b union select b from t where b<a;
    +------+
    | a    |
    +------+
    |   10 |
    |   50 |
    |   20 |
    +------+
    3 rows in set (0.00 sec)
    
    ;)
    «Когда у общества нет цветовой дифференциации штанов — то нет цели!»
    http://oldengremlin.blogspot.com/

  4. Пользователь сказал cпасибо oldengremlin за это сообщение:

    blex (19.05.2010)

  5. #4
    Программер blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда

    Регистрация
    20.09.2006
    Адрес
    слушаю Русский Рок на online.fm
    Сообщений
    2,629
    Сказал(а) спасибо
    387
    Поблагодарили 2,320 раз(а) в 724 сообщениях

    По умолчанию

    Цитата Сообщение от oldengremlin Посмотреть сообщение
    3 rows in set (0.00 sec)
    ;)
    да, провтыкал. 4 строчки при union all будет.

    Цитата Сообщение от oldengremlin Посмотреть сообщение
    select if(a>b,b,a) as r from t;
    select min(a,b) as a в любом диалекте
    ;)

  6. #5
    Единственное, что нужно для триумфа зла, это чтобы хорошие люди ничего не делали. © Эдмунд Бёрк oldengremlin отключил(а) отображение уровня репутации Аватар для oldengremlin

    Регистрация
    02.10.2008
    Адрес
    Киев
    Сообщений
    10,896
    Сказал(а) спасибо
    5,935
    Поблагодарили 12,477 раз(а) в 4,512 сообщениях
    Записей в дневнике
    14
    Изображения
    10

    По умолчанию

    Цитата Сообщение от blex Посмотреть сообщение
    select min(a,b) as a в любом диалекте
    Код:
    mysql> select min(a,b) from t;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b) from t' at line 1
    
    Ай, ай, ай... Александр, нехорошо учить плохому студентов ;)
    min() это функция выборки минимального значения в группировке, ага? ;) И, верно, определена она в ANSI, но именно для группировки, а не для сравнения столбцов :(
    «Когда у общества нет цветовой дифференциации штанов — то нет цели!»
    http://oldengremlin.blogspot.com/

  7. Пользователь сказал cпасибо oldengremlin за это сообщение:

    blex (19.05.2010)

  8. #6
    Программер blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда blex Легенда

    Регистрация
    20.09.2006
    Адрес
    слушаю Русский Рок на online.fm
    Сообщений
    2,629
    Сказал(а) спасибо
    387
    Поблагодарили 2,320 раз(а) в 724 сообщениях

    По умолчанию

    Цитата Сообщение от oldengremlin Посмотреть сообщение
    Код:
    mysql> select min(a,b) from t;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b) from t' at line 1
    
    Ай, ай, ай... Александр, нехорошо учить плохому студентов ;)
    min() это функция выборки минимального значения в группировке, ага? ;) И, верно, определена она в ANSI, но именно для группировки, а не для сравнения столбцов :(
    сыплю голову пеплом, увольняюсь и иду работать жуниром =(
    сначала не увидеть что юнион без ола, потом спутать min и least - это вообще опзор. раньше я себе такого не позволял....
    а надо оказывается совсем немного - год админработы, и все что знал и умел делать руками осталось в прошлом =(
    пойду напьюсь перед увольнением...

  9. #7
    Единственное, что нужно для триумфа зла, это чтобы хорошие люди ничего не делали. © Эдмунд Бёрк oldengremlin отключил(а) отображение уровня репутации Аватар для oldengremlin

    Регистрация
    02.10.2008
    Адрес
    Киев
    Сообщений
    10,896
    Сказал(а) спасибо
    5,935
    Поблагодарили 12,477 раз(а) в 4,512 сообщениях
    Записей в дневнике
    14
    Изображения
    10

    По умолчанию

    Код:
    mysql> create table t ( a int, b int);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> insert into t (a,b) values (10,20),(40,10),(50,60),(40,20);
    Query OK, 4 rows affected (0.01 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql> select * from t;
    +------+------+
    | a    | b    |
    +------+------+
    |   10 |   20 |
    |   40 |   10 |
    |   50 |   60 |
    |   40 |   20 |
    +------+------+
    4 rows in set (0.00 sec)
    
    mysql> select if(a>b,b,a) as r from t;
    +------+
    | r    |
    +------+
    |   10 |
    |   10 |
    |   50 |
    |   20 |
    +------+
    4 rows in set (0.00 sec)
    
    Диалект SQL ты не уточнял. Решение дано для mysql.
    «Когда у общества нет цветовой дифференциации штанов — то нет цели!»
    http://oldengremlin.blogspot.com/

  10. Пользователь сказал cпасибо oldengremlin за это сообщение:

    psixoz (19.05.2010)

+ Ответить в теме

Похожие темы

  1. ПОМОГИТЕ!!!
    от Andre в разделе Автохауc
    Ответов: 4
    Последнее сообщение: 29.07.2008, 15:36
  2. Ответов: 4
    Последнее сообщение: 15.06.2007, 23:39
  3. Помогите с фтп
    от Denn в разделе Администрирование и программирование
    Ответов: 4
    Последнее сообщение: 17.05.2007, 18:39
  4. Ответов: 3
    Последнее сообщение: 16.05.2007, 11:33

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Херсонский ТОП   Рейтинг@Mail.ru МЕТА - Украина. Рейтинг сайтов

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112