|
|
|
ORDER BY в UNION
|
|||
|---|---|---|---|
|
#18+
Имеем таблицу CREATE DATABASE Solution; CREATE TABLE Solution.table_costs ( id SMALLINT NOT NULL AUTO_INCREMENT, d_f DATE NOT NULL, price INT(15) NOT NULL, category VARCHAR(25) NOT NULL, PRIMARY KEY(id)); INSERT INTO Solution.table_costs VALUES(null, '2015-01-15', 31, ‘transport’), (null, '2015-01-16', 31, ‘transport’), (null, '2015-01-17', 30, ‘tobaco’), (null, '2015-02-01', 31, ‘transport’), (null, '2015-02-14', 32, ‘beer’), (null, '2015-01-01', 30, ‘other’); В результате выборки мы должны получить 3 категории(`category`) с сортировкой по дате(`d_f`). Первым делом идут категории с точным совпадением цены(`price`), следом с отклонением плюс-минус 5% от цены. Запрос: ( SELECT `category` FROM( SELECT `category` FROM Solution.table_costs WHERE `price`=31 ORDER BY `d_f` DESC) a ) UNION ( SELECT `category` FROM( SELECT `category` FROM Solution.table_costs WHERE `price`>31 * 0.95 AND `price`<31 * 1.05 ORDER BY `d_f` DESC) b ) LIMIT 3; Зачем нужны переменные a и b? Можно ли обойтись без них? Правильно ли выполнен запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.05.2015, 23:08:46 |
|
||
|
ORDER BY в UNION
|
|||
|---|---|---|---|
|
#18+
Во-первых, union all, во-вторых, не факт, что даже union all без внешней сортировки даст то, что надо, в-третьих, да, можно, в-четвёртых, нет, неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 08:31:20 |
|
||
|
ORDER BY в UNION
|
|||
|---|---|---|---|
|
#18+
tanglirВо-первых, union all, во-вторых, не факт, что даже union all без внешней сортировки даст то, что надо, в-третьих, да, можно, в-четвёртых, нет, неправильно. 1. Почему UNION ALL? 2. Как правильно сделать внешнюю сортировку? 3. Как обойтись без переменных а и b? 4. В чём ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 11:49:51 |
|
||
|
ORDER BY в UNION
|
|||
|---|---|---|---|
|
#18+
michail_kul, 1) a и b нужны по правилам синтаксиса подзапроса https://dev.mysql.com/doc/refman/5.6/en/from-clause-subqueries.html 2) можно не использовать подзапрос 3) неправильно. почему бы вам не попробовать запрос на вашей же табличке? а) по-моему, в подзапросе FROM сортировка не разрешается б) я бы добавила дату, возможно тогда вы бы и получили, то что вам нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 12:51:29 |
|
||
|
ORDER BY в UNION
|
|||
|---|---|---|---|
|
#18+
mini.weblabmichail_kul, 1) a и b нужны по правилам синтаксиса подзапроса https://dev.mysql.com/doc/refman/5.6/en/from-clause-subqueries.html 2) можно не использовать подзапрос 3) неправильно. почему бы вам не попробовать запрос на вашей же табличке? а) по-моему, в подзапросе FROM сортировка не разрешается б) я бы добавила дату, возможно тогда вы бы и получили, то что вам нужно 1. Понял 2.Как написать тоже без него? 3. У меня всё замечательно работает с этим запросом. а. Тем не менее сортирует. б. Не понял. Куда добавила бы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 13:07:19 |
|
||
|
ORDER BY в UNION
|
|||
|---|---|---|---|
|
#18+
michail_kul, 1) добавляем дату и убираем подзапрос ( SELECT `category`, `d_f` FROM Solution.table_costs WHERE `price`=31 ORDER BY `d_f` DESC ) UNION ( SELECT `category`, `d_f` FROM Solution.table_costs WHERE `price`>31 * 0.95 AND `price`<31 * 1.05 ORDER BY `d_f` DESC ) 2) попробуйте добавить в таблицу INSERT INTO Solution.table_costs VALUES (null, '2015-01-19', 30, ‘transport’), (null, '2015-02-16', 32, ‘transport’) что возвращает запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 13:23:03 |
|
||
|
ORDER BY в UNION
|
|||
|---|---|---|---|
|
#18+
mini.weblabmichail_kul, 1) добавляем дату и убираем подзапрос ( SELECT `category`, `d_f` FROM Solution.table_costs WHERE `price`=31 ORDER BY `d_f` DESC ) UNION ( SELECT `category`, `d_f` FROM Solution.table_costs WHERE `price`>31 * 0.95 AND `price`<31 * 1.05 ORDER BY `d_f` DESC ) 2) попробуйте добавить в таблицу INSERT INTO Solution.table_costs VALUES (null, '2015-01-19', 30, ‘transport’), (null, '2015-02-16', 32, ‘transport’) что возвращает запрос? 1) Запрос возвращает во-первых не уникальные значения, во-вторых не отсортированные по дате. 2) Добавил.. ничего не изменилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 16:05:53 |
|
||
|
ORDER BY в UNION
|
|||
|---|---|---|---|
|
#18+
michail_kul, ох, неправильно поняла, что вы хотели (я думала, что если транспорт, например, в первой и во второй категории, то его тоже нужно выводить 2 раза) 1) ваш запрос возвращает список категорий: transport, beer, tobacco (вроде все верно) 2) правильность запроса можно проверить, выведя дополнительно d_f и price: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 3) еще благодаря вам узнала, почему не работает вот это =) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. вот, https://dev.mysql.com/doc/refman/5.6/en/union.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2015, 17:07:49 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38955687&tid=1833218]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 303ms |

| 0 / 0 |
