[ 
https://issues.apache.org/jira/browse/CASSANDRA-10310?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14805230#comment-14805230
 ] 

Benjamin Lerer commented on CASSANDRA-10310:
--------------------------------------------

I proposed to support the following casting:

{code}
ascii -> ascii, text, varchar           
bigint -> bigint, decimal, double, float, int, tinyint, smallint
tinyint -> bigint, decimal, double, float, int, tinyint, smallint
smallint -> bigint, decimal, double, float, int, tinyint, smallint      
blob    
boolean -> ascii, boolean, text, varchar
counter -> ascii, bigint, decimal, double, float, int, tinyint, smallint        
date -> date, timestamp 
decimal -> bigint, decimal, double, float, int, tinyint, smallint       
double -> bigint, decimal, double, float, int, tinyint, smallint        
float -> bigint, decimal, double, float, int, tinyint, smallint 
inet -> ascii, text, varchar    
int -> bigint, decimal, double, float, int, tinyint, smallint           
text -> text, varchar           
time    
timestamp -> date, timestamp
timeuuid -> date, timestamp, timeuuid   
uuid    
varchar -> text, varchar        
varint -> bigint, decimal, double, float, int, tinyint, smallint
{code}

Feedbacks are wellcome.

> Support type casting in selection clause
> ----------------------------------------
>
>                 Key: CASSANDRA-10310
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-10310
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Jon Haddad
>            Assignee: Benjamin Lerer
>              Labels: patch
>         Attachments: cassandra-2.2-10310.txt, cassandra-3.0-10310.txt
>
>
> When selecting an avg() of int values, the type of the avg value returned is 
> an int as well, meaning it's rounded off to an incorrect answer.  This is 
> both incorrect and inconsistent with other databases.
> Example:
> {quote}
> cqlsh:test> select * from monkey where id = 1;
>  id | i | v
> ----+---+---
>   1 | 1 | 1
>   1 | 2 | 1
>   1 | 3 | 2
> (3 rows)
> cqlsh:test> select avg(v) from monkey where id = 1;
>  system.avg(v)
> ---------------
>              1
> (1 rows)
> {quote}
> I tried avg() with MySQL, here's the result:
> {quote}
> mysql> create table blah ( id int primary key, v int );
> Query OK, 0 rows affected (0.15 sec)
> mysql> insert into blah set id = 1, v = 1;
> Query OK, 1 row affected (0.02 sec)
> mysql> insert into blah set id = 1, v = 1;
> ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
> mysql> insert into blah set id = 2, v = 1;
> Query OK, 1 row affected (0.01 sec)
> mysql> insert into blah set id = 3, v = 2;
> Query OK, 1 row affected (0.01 sec)
> mysql> select avg(v) from blah;
> +--------+
> | avg(v) |
> +--------+
> | 1.3333 |
> +--------+
> 1 row in set (0.00 sec)
> {quote}
> I created a new table using the above query. The result:
> {quote}
> mysql> create table foo as select avg(v) as a from blah;
> Query OK, 1 row affected, 1 warning (0.04 sec)
> Records: 1  Duplicates: 0  Warnings: 1
> mysql> desc foo;
> +-------+---------------+------+-----+---------+-------+
> | Field | Type          | Null | Key | Default | Extra |
> +-------+---------------+------+-----+---------+-------+
> | a     | decimal(14,4) | YES  |     | NULL    |       |
> +-------+---------------+------+-----+---------+-------+
> 1 row in set (0.01 sec)
> {quote}
> It works the same way in postgres, and to my knowledge, every RDBMs.
> Broken in 2.2, 3.0.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to