|
|
|
Средняя цена товара
|
|||
|---|---|---|---|
|
#18+
есть таблица, ну скажем такая: id name price 1 продукт1 17800 2 продукт 2 23400 3 продукт 3 38900 .. n продукт n цена n нужно найти среднее значение price. НО! Не просто высчитать среднее, а некий СУЩЕСТВУЮЩИЙ price? который более менее посредине между min и max. Я так понимаю, что нужно высчитать среднее, а потом найти ближайшее к нему, но не догоню как сделать. Помогите с запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2013, 15:17:03 |
|
||
|
Средняя цена товара
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2013, 15:37:28 |
|
||
|
Средняя цена товара
|
|||
|---|---|---|---|
|
#18+
Cygapb-007 Код: sql 1. 2. 3. 4. наверно будет быстрее найти среднее, затем ближайший сверху (по индексу) и ближайший снизу (по индексу) и выбрать самый "ближайший" из двух. Ордер по функции --- точно полный скан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2013, 17:04:15 |
|
||
|
Средняя цена товара
|
|||
|---|---|---|---|
|
#18+
SharuPoNemnoguнужно найти среднее значение price. НО! Не просто высчитать среднее, а некий СУЩЕСТВУЮЩИЙ price? который более менее посредине между min и max.Может, вам нужна медиана ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2013, 17:53:55 |
|
||
|
Средняя цена товара
|
|||
|---|---|---|---|
|
#18+
javajdbcнаверно будет быстрее найти среднее, затем ближайший сверху (по индексу) и ближайший снизу (по индексу) и выбрать самый "ближайший" из двух. Ордер по функции --- точно полный сканНе уверен, что это быстрее :) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2013, 18:06:52 |
|
||
|
Средняя цена товара
|
|||
|---|---|---|---|
|
#18+
Если считать среднее, то без скана не обойтись. Но, если подойдет (min(price) + max(price) ) /2 вместо среднего, то можно так. Код: sql 1. 2. 3. 4. 5. 6. Код: sql 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2013, 18:28:20 |
|
||
|
Средняя цена товара
|
|||
|---|---|---|---|
|
#18+
Cygapb-007 http://sqlfiddle.com/#!2/3fa96/2 Разница в два раза, как и количество сканов таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2013, 18:28:28 |
|
||
|
Средняя цена товара
|
|||
|---|---|---|---|
|
#18+
Cygapb-007javajdbcнаверно будет быстрее найти среднее, затем ближайший сверху (по индексу) и ближайший снизу (по индексу) и выбрать самый "ближайший" из двух. Ордер по функции --- точно полный сканНе уверен, что это быстрее :) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. чисто по прикидке сравнить этот вариант (Б) и Ваш начальный (А): оба получают АВГ(присе), затем (А) для каждого прайся выс4итывает дельту и сортирует. Ваероиант (Б) делает два быстрых поиска по индексу (....where price>=@avg order by price limit 1....) и сортирует два результата. Т.е (Б) имеет лишний полный скан и полную сортировку против (А) двух индекс поисков и сортировку двух результатов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2013, 18:50:57 |
|
||
|
Средняя цена товара
|
|||
|---|---|---|---|
|
#18+
miksoftCygapb-007 sqlfiddle.com/#!2/3fa96/2 Разница в два раза, как и количество сканов таблицы.На MySQL 5.6.6 разница не так ощутима... sqlfiddle.com/#!9/3fa96/15 Правда, с переменной так легко там не получилось, пришлось в отдельный запрос вынести. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2013, 19:15:05 |
|
||
|
Средняя цена товара
|
|||
|---|---|---|---|
|
#18+
javajdbcчисто по прикидке сравнить этот вариант (Б) и Ваш начальный (А): оба получают АВГ(присе), затем (А) для каждого прайся выс4итывает дельту и сортирует. Ваероиант (Б) делает два быстрых поиска по индексу (....where price>=@avg order by price limit 1....) и сортирует два результата. Т.е (Б)(A) имеет лишний полный скан и полную сортировку против (А)(Б) двух индекс поисков и сортировку двух результатовНу в общем-то я ж не против ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2013, 19:35:30 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38403165&tid=1836011]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 319ms |

| 0 / 0 |
