170 похожих чатов

Народ, у меня паранойя. То ли взгляд замылен, то ли

я чего-то не понимаю.
Есть тестовая таблица status_log:
CREATE TABLE `status_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`rank` int(11) DEFAULT 50,
)
Заполняю её данными.

Делаю select:
select id,rank as rank,(rand()*100) as thres from status_log where rank = 50
Получаю 66 тысяч записей
| 6575236 | 50 | 80.0029963068692 |
| 6575286 | 50 | 34.903977657578864 |
| 6575476 | 50 | 34.51090244065123 |
| 6575511 | 50 | 67.84258230388404 |
| 6575589 | 50 | 35.68020727083106 |
| 6575644 | 50 | 74.87329251586766 |
| 6575723 | 50 | 67.32584384020961 |
| 6575771 | 50 | 12.009344726809621 |
| 6575863 | 50 | 58.06919518678374 |
+---------+------+-----------------------+
66169 rows in set (2.502 sec).

Теперь решаю отфильтровать по пороговому значению:
select * from (select id,rank as rank,(rand()*100) as thres from status_log where rank = 50) t where thres>rank order by thres;

Казалось бы, результатов должно быть в среднем 33000. Но нет, их в 2 раза меньше:

| 6320116 | 50 | 99.96190201487569 |
| 1042844 | 50 | 99.96344596144134 |
| 331390 | 50 | 99.96392289173224 |
| 6381040 | 50 | 99.97539855537508 |
| 3049964 | 50 | 99.97666422275515 |
| 3986559 | 50 | 99.9775216914504 |
| 2427419 | 50 | 99.978287797401 |
| 4396732 | 50 | 99.97966075314177 |
| 4001782 | 50 | 99.98002871869134 |
| 1788580 | 50 | 99.98064143581375 |
| 5300286 | 50 | 99.98275954274717 |
| 146401 | 50 | 99.98552389441573 |
| 4744748 | 50 | 99.98644758014609 |
+---------+------+--------------------+
16449 rows in set (2.188 sec)

Окей, меняем знак с "Больше" на "Меньше":
select * from (select id,rank as rank,(rand()*100) as thres from status_log where rank = 50) t where thres<rank order by thres;

Вывод:
| 5485599 | 50 | 49.96481263075472 |
| 968876 | 50 | 49.97663865795046 |
| 3613954 | 50 | 49.97714241033154 |
| 6263870 | 50 | 49.97751875778429 |
| 67389 | 50 | 49.97757910748718 |
| 4653786 | 50 | 49.98035016467827 |
| 6041489 | 50 | 49.980370281245904 |
| 5064204 | 50 | 49.989308742796354 |
| 1699741 | 50 | 49.991373205549436 |
| 3234039 | 50 | 49.99390454030959 |
| 806791 | 50 | 49.99575274996064 |
| 3713581 | 50 | 49.99814410693771 |
+---------+------+----------------------+
16562 rows in set (2.373 sec)

Опять 16000 значений! А где остальные 32000?

При этом, если я rand()*100 заранее подсчитываю и запихиваю в один столбец, то всё становится очевидно, всего по 32000.

При выборе rank=30 у меня распределение 6000 и 32000.

Где я продолбался?

2 ответов

10 просмотров

Мб это https://bugs.mysql.com/bug.php?id=101101 https://bugs.mysql.com/bug.php?id=101108

Diver-Al Автор вопроса

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта