Bug #29144 Error on sums
Submitted: 15 Jun 2007 16:25 Modified: 15 Jun 2007 18:26
Reporter: francisco santana Email Updates:
Status: Can't repeat Impact on me:
None 
Category:MySQL Server Severity:S1 (Critical)
Version:5.0+ OS:Any
Assigned to: CPU Architecture:Any
Tags: decimals, sum

[15 Jun 2007 16:25] francisco santana
Description:
Record 1 Valuea=0, valueb=449889977.99560
Record 2 valuea=0, valueb=550110022.00439
When:
SELECT 'X' X,
	(SUM(VALUEB) - SUM(VALUEA)) TOTAL,
	ROUND(SUM(VALUEB) - SUM(VALUEA),5) TOTAL
FROM 
	SUMTEST
GROUP BY X;

Returns wrong results if not rounding is aplied 
RESULTS:
"X"	TOTAL	TOTAL
"X"	0.99999	999999999.99999 <--- Why the diference?

Pleasee find a full dump to review the error, if sum if greater than 1000000000.00000 no error is found.

please i need to be shure why this is happening
Many thanks

How to repeat:
drop table SUMTEST;
create table `SUMTEST` (  `ID` int NOT NULL AUTO_INCREMENT , `VALUEA` decimal (26,5) NOT NULL , `VALUEB` decimal (26,5) NOT NULL , PRIMARY KEY ( `ID`))  Engine=MyISAM comment='' row_format=DYNAMIC;
#insert into `SUMTEST`(`ID`,`VALUEA`,`VALUEB`) values ( NULL,'0.00000','550110022.00439');
#insert into `SUMTEST`(`ID`,`VALUEA`,`VALUEB`) values ( NULL,'0.00000','449889977.99560');
insert into `SUMTEST`(`ID`,`VALUEA`,`VALUEB`) values ( NULL,0,550110022.00439);
insert into `SUMTEST`(`ID`,`VALUEA`,`VALUEB`) values ( NULL,0,449889977.99560);
SELECT 'X' X,
	(SUM(VALUEB) - SUM(VALUEA)) TOTAL,
	ROUND(SUM(VALUEB) - SUM(VALUEA),5) TOTAL
FROM 
	SUMTEST
GROUP BY X;
[15 Jun 2007 16:27] francisco santana
Correct db version and variables on test
"Variable_name"	"Value"
"auto_increment_increment"	"1"
"auto_increment_offset"	"1"
"automatic_sp_privileges"	"ON"
"back_log"	"50"
"basedir"	"C:\\Program Files\\MySQL\\MySQL Server 5.0\\"
"binlog_cache_size"	"32768"
"bulk_insert_buffer_size"	"8388608"
"character_set_client"	"latin1"
"character_set_connection"	"latin1"
"character_set_database"	"latin1"
"character_set_filesystem"	"binary"
"character_set_results"	"latin1"
"character_set_server"	"latin1"
"character_set_system"	"utf8"
"character_sets_dir"	"C:\\Program Files\\MySQL\\MySQL Server 5.0\\share\\charsets\\"
"collation_connection"	"latin1_swedish_ci"
"collation_database"	"latin1_swedish_ci"
"collation_server"	"latin1_swedish_ci"
"completion_type"	"0"
"concurrent_insert"	"1"
"connect_timeout"	"5"
"datadir"	"C:\\Program Files\\MySQL\\MySQL Server 5.0\\Data\\"
"date_format"	"%Y-%m-%d"
"datetime_format"	"%Y-%m-%d %H:%i:%s"
"default_week_format"	"0"
"delay_key_write"	"ON"
"delayed_insert_limit"	"100"
"delayed_insert_timeout"	"300"
"delayed_queue_size"	"1000"
"div_precision_increment"	"4"
"engine_condition_pushdown"	"OFF"
"expire_logs_days"	"0"
"flush"	"OFF"
"flush_time"	"1800"
"ft_boolean_syntax"	"+ -><()~*:\"\"&|"
"ft_max_word_len"	"84"
"ft_min_word_len"	"4"
"ft_query_expansion_limit"	"20"
"ft_stopword_file"	"(built-in)"
"group_concat_max_len"	"1024"
"have_archive"	"YES"
"have_bdb"	"NO"
"have_blackhole_engine"	"NO"
"have_compress"	"YES"
"have_crypt"	"NO"
"have_csv"	"NO"
"have_dynamic_loading"	"YES"
"have_example_engine"	"NO"
"have_federated_engine"	"NO"
"have_geometry"	"YES"
"have_innodb"	"YES"
"have_isam"	"NO"
"have_merge_engine"	"YES"
"have_ndbcluster"	"NO"
"have_openssl"	"DISABLED"
"have_query_cache"	"YES"
"have_raid"	"NO"
"have_rtree_keys"	"YES"
"have_symlink"	"YES"
"init_connect"	""
"init_file"	""
"init_slave"	""
"innodb_additional_mem_pool_size"	"2097152"
"innodb_autoextend_increment"	"8"
"innodb_buffer_pool_awe_mem_mb"	"0"
"innodb_buffer_pool_size"	"8388608"
"innodb_checksums"	"ON"
"innodb_commit_concurrency"	"0"
"innodb_concurrency_tickets"	"500"
"innodb_data_file_path"	"ibdata1:10M:autoextend"
"innodb_data_home_dir"	""
"innodb_doublewrite"	"ON"
"innodb_fast_shutdown"	"1"
"innodb_file_io_threads"	"4"
"innodb_file_per_table"	"OFF"
"innodb_flush_log_at_trx_commit"	"1"
"innodb_flush_method"	""
"innodb_force_recovery"	"0"
"innodb_lock_wait_timeout"	"50"
"innodb_locks_unsafe_for_binlog"	"OFF"
"innodb_log_arch_dir"	""
"innodb_log_archive"	"OFF"
"innodb_log_buffer_size"	"1048576"
"innodb_log_file_size"	"10485760"
"innodb_log_files_in_group"	"2"
"innodb_log_group_home_dir"	".\\"
"innodb_max_dirty_pages_pct"	"90"
"innodb_max_purge_lag"	"0"
"innodb_mirrored_log_groups"	"1"
"innodb_open_files"	"300"
"innodb_rollback_on_timeout"	"OFF"
"innodb_support_xa"	"ON"
"innodb_sync_spin_loops"	"20"
"innodb_table_locks"	"ON"
"innodb_thread_concurrency"	"8"
"innodb_thread_sleep_delay"	"10000"
"interactive_timeout"	"28800"
"join_buffer_size"	"131072"
"key_buffer_size"	"8388608"
"key_cache_age_threshold"	"300"
"key_cache_block_size"	"1024"
"key_cache_division_limit"	"100"
"language"	"C:\\Program Files\\MySQL\\MySQL Server 5.0\\share\\english\\"
"large_files_support"	"ON"
"large_page_size"	"0"
"large_pages"	"OFF"
"lc_time_names"	"en_US"
"license"	"GPL"
"local_infile"	"ON"
"log"	"OFF"
"log_bin"	"OFF"
"log_bin_trust_function_creators"	"OFF"
"log_error"	".\\fsantana.err"
"log_queries_not_using_indexes"	"OFF"
"log_slave_updates"	"OFF"
"log_slow_queries"	"OFF"
"log_warnings"	"1"
"long_query_time"	"10"
"low_priority_updates"	"OFF"
"lower_case_file_system"	"ON"
"lower_case_table_names"	"2"
"max_allowed_packet"	"1048576"
"max_binlog_cache_size"	"4294967295"
"max_binlog_size"	"1073741824"
"max_connect_errors"	"10"
"max_connections"	"100"
"max_delayed_threads"	"20"
"max_error_count"	"64"
"max_heap_table_size"	"16777216"
"max_insert_delayed_threads"	"20"
"max_join_size"	"4294967295"
"max_length_for_sort_data"	"1024"
"max_prepared_stmt_count"	"16382"
"max_relay_log_size"	"0"
"max_seeks_for_key"	"4294967295"
"max_sort_length"	"1024"
"max_sp_recursion_depth"	"0"
"max_tmp_tables"	"32"
"max_user_connections"	"0"
"max_write_lock_count"	"4294967295"
"multi_range_count"	"256"
"myisam_data_pointer_size"	"6"
"myisam_max_sort_file_size"	"107374182400"
"myisam_recover_options"	"OFF"
"myisam_repair_threads"	"1"
"myisam_sort_buffer_size"	"8388608"
"myisam_stats_method"	"nulls_unequal"
"named_pipe"	"OFF"
"net_buffer_length"	"16384"
"net_read_timeout"	"30"
"net_retry_count"	"10"
"net_write_timeout"	"60"
"new"	"OFF"
"old_passwords"	"ON"
"open_files_limit"	"622"
"optimizer_prune_level"	"1"
"optimizer_search_depth"	"62"
"pid_file"	"C:\\Program Files\\MySQL\\MySQL Server 5.0\\Data\\fsantana.pid"
"port"	"3306"
"preload_buffer_size"	"32768"
"profiling"	"OFF"
"profiling_history_size"	"15"
"protocol_version"	"10"
"query_alloc_block_size"	"8192"
"query_cache_limit"	"1048576"
"query_cache_min_res_unit"	"4096"
"query_cache_size"	"0"
"query_cache_type"	"ON"
"query_cache_wlock_invalidate"	"OFF"
"query_prealloc_size"	"8192"
"range_alloc_block_size"	"2048"
"read_buffer_size"	"61440"
"read_only"	"OFF"
"read_rnd_buffer_size"	"258048"
"relay_log_purge"	"ON"
"relay_log_space_limit"	"0"
"rpl_recovery_rank"	"0"
"secure_auth"	"OFF"
"shared_memory"	"OFF"
"shared_memory_base_name"	"MYSQL"
"server_id"	"0"
"skip_external_locking"	"ON"
"skip_networking"	"OFF"
"skip_show_database"	"OFF"
"slave_compressed_protocol"	"OFF"
"slave_load_tmpdir"	"C:\\WINDOWS\\TEMP\\"
"slave_net_timeout"	"3600"
"slave_skip_errors"	"OFF"
"slave_transaction_retries"	"10"
"slow_launch_time"	"2"
"sort_buffer_size"	"217080"
"sql_big_selects"	"ON"
"sql_mode"	""
"sql_notes"	"ON"
"sql_warnings"	"OFF"
"ssl_ca"	""
"ssl_capath"	""
"ssl_cert"	""
"ssl_cipher"	""
"ssl_key"	""
"storage_engine"	"InnoDB"
"sync_binlog"	"0"
"sync_frm"	"ON"
"system_time_zone"	"Eastern Daylight Time"
"table_cache"	"256"
"table_lock_wait_timeout"	"50"
"table_type"	"InnoDB"
"thread_cache_size"	"8"
"thread_stack"	"196608"
"time_format"	"%H:%i:%s"
"time_zone"	"SYSTEM"
"timed_mutexes"	"OFF"
"tmp_table_size"	"5242880"
"tmpdir"	"C:\\WINDOWS\\TEMP\\"
"transaction_alloc_block_size"	"8192"
"transaction_prealloc_size"	"4096"
"tx_isolation"	"REPEATABLE-READ"
"updatable_views_with_limit"	"YES"
"version"	"5.0.37-community-nt"
"version_comment"	"MySQL Community Edition (GPL)"
"version_compile_machine"	"ia32"
"version_compile_os"	"Win32"
"wait_timeout"	"28800"
[15 Jun 2007 18:26] Sveta Smirnova
Thank you for the report.

I can not repeat described behaviour with current development sources:

SELECT 'X' X,
(SUM(VALUEB) - SUM(VALUEA)) TOTAL,
ROUND(SUM(VALUEB) - SUM(VALUEA),5) TOTAL
FROM 
SUMTEST
GROUP BY X;
X       TOTAL   TOTAL
X       999999999.99999 999999999.99999