[MDEV-19071] Wrong results when using STDDEV_SAMP() and view Created: 2019-03-28  Updated: 2023-01-02  Resolved: 2023-01-02

Status: Closed
Project: MariaDB Server
Component/s: Views
Affects Version/s: 5.5, 10.0, 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9, 10.10
Fix Version/s: 10.11.2, 10.3.38, 10.4.28, 10.5.19, 10.6.12, 10.7.8, 10.8.7, 10.9.5, 10.10.3

Type: Bug Priority: Major
Reporter: Alice Sherepa Assignee: Sergei Golubchik
Resolution: Fixed Votes: 1
Labels: None


 Description   

create table t1(i int);
insert into t1 values  (1),(2),(3),(4),(5);
 
select stddev_samp(i) from t1;
create view v1 as select stddev_samp(i) from t1;
select * from v1;

MariaDB [test]> select stddev_samp(i) from t1;
+----------------+
| stddev_samp(i) |
+----------------+
|         1.5811 |
+----------------+
1 row in set (0.001 sec)
 
MariaDB [test]> create or replace view v1 as select stddev_samp(i) from t1;
Query OK, 0 rows affected (0.009 sec)
 
MariaDB [test]> select * from v1;
+----------------+
| stddev_samp(i) |
+----------------+
|         1.4142 |
+----------------+
1 row in set (0.002 sec)

And with window function:

create table t1(i int);
insert into t1 values  (1),(2),(3),(4),(5);
 
select stddev_samp(i) over (order by i) from t1;
create view v1 as select stddev_samp(i) over (order by i) from t1;
select * from v1;

MariaDB [test]> select stddev_samp(i) over (order by i) from t1;
+----------------------------------+
| stddev_samp(i) over (order by i) |
+----------------------------------+
|                             NULL |
|                           0.7071 |
|                           1.0000 |
|                           1.2910 |
|                           1.5811 |
+----------------------------------+
5 rows in set (0.002 sec)
 
MariaDB [test]> create view v1 as select stddev_samp(i) over (order by i) from t1;
Query OK, 0 rows affected (0.007 sec)
 
MariaDB [test]> select * from v1;
+----------------------------------+
| stddev_samp(i) over (order by i) |
+----------------------------------+
|                           0.0000 |
|                           0.5000 |
|                           0.8165 |
|                           1.1180 |
|                           1.4142 |
+----------------------------------+
5 rows in set (0.003 sec)



 Comments   
Comment by guy_rouillard [ 2021-01-22 ]

If you use STDDEV_SAMP in a view query, the query gets transformed internally by the database engine (for optimization purposes).

When you display that view's script, you will notice that the function STDDEV_SAMP has been replaced by the function STD.

The issue is that STD is not equivalent to STDDEV_SAMP. STD is a shortcut to STDDEV_POP, which is the population standard deviation, while STDDEV_SAMP is for the sample standard deviation.

I don't understand why this issue hasn't a higher priority.

GR.

Comment by guy_rouillard [ 2021-01-22 ]

Workaround:

  • Use SQRT(VAR_SAMP(expr)) instead of STDDEV_SAMP(expr).

GR.

Generated at Thu Feb 08 08:48:50 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.