Bug #26209 | wrong result using COUNT(DISTINCT ?) querying a VIEW with GROUP BY and ORDER BY | ||
---|---|---|---|
Submitted: | 9 Feb 2007 6:47 | Modified: | 26 Feb 2007 20:54 |
Reporter: | Stefano Bittante | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Views | Severity: | S2 (Serious) |
Version: | 5.0.36-BK, 5.0.27 | OS: | Linux (Linux, winXP) |
Assigned to: | Igor Babaev | CPU Architecture: | Any |
Tags: | count, distinct, GROUP BY, SELECT, tables, Views |
[9 Feb 2007 6:47]
Stefano Bittante
[9 Feb 2007 9:04]
Valeriy Kravchuk
Thank you for a bug report. Verified just as described with 5.0.36-BK on Linux: mysql> select version(); +-----------+ | version() | +-----------+ | 5.0.36 | +-----------+ 1 row in set (0.01 sec) mysql> CREATE TABLE test_table ( -> id int(11) NOT NULL, -> country varchar(100), -> code int(11) default NULL, -> PRIMARY KEY (id) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.09 sec) mysql> INSERT INTO test_table VALUES (1,'ITALY',100); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO test_table VALUES (2,'ITALY',200); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO test_table VALUES (3,'ITALY',100); Query OK, 1 row affected (0.00 sec) mysql> create or replace view test_view as -> select * -> from test_table; Query OK, 0 rows affected (0.01 sec) mysql> select -> code, -> count(distinct country) -> from test_table -> group by code -> order by max(id); +------+-------------------------+ | code | count(distinct country) | +------+-------------------------+ | 200 | 1 | | 100 | 1 | +------+-------------------------+ 2 rows in set (0.01 sec) mysql> select -> code, -> count(country) -> from test_view -> group by code -> order by max(id); +------+----------------+ | code | count(country) | +------+----------------+ | 200 | 1 | | 100 | 2 | +------+----------------+ 2 rows in set (0.01 sec) mysql> select -> code, -> count(distinct country) -> from test_view -> group by code -> order by max(id); +------+-------------------------+ | code | count(distinct country) | +------+-------------------------+ | 100 | 1 | | 200 | 1 | | 100 | 1 | +------+-------------------------+ 3 rows in set (0.00 sec)
[12 Feb 2007 3:33]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/19668 ChangeSet@1.2412, 2007-02-11 19:36:46-08:00, igor@olga.mysql.com +3 -0 Fixed bug #26209. The function make_unireg_sortorder ignored the fact that any view field is represented by a 'ref' object. This could lead to wrong results for the queries containing both GROUP BY and ORDER BY clauses.
[14 Feb 2007 10:35]
Igor Babaev
The fix has been pushed into 5.0.36 and 5.1.16-beta.
[26 Feb 2007 20:54]
Paul DuBois
Noted in 5.0.36, 5.1.16 changelogs. Using ORDER BY or GROUP BY could yield different results when selecting from a view and selecting from the underlying table.