mysql> SELECT name, address, MAX(age) FROM t GROUP BY name;ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUPBY clause and contains nonaggregated column 'mydb.t.address' whichis not functionally dependent on columns in GROUP BY clause; thisis incompatible with sql_mode=only_full_group_by
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
SELECT age FROM t GROUP BY age-1;
SELECT ANY_VALUE(age) FROM t GROUP BY age-1;
mysql> SELECT name, MAX(age) FROM t;ERROR 1140 (42000): In aggregated query without GROUP BY, expression#1 of SELECT list contains nonaggregated column 'mydb.t.name'; thisis incompatible with sql_mode=only_full_group_by
SELECT ANY_VALUE(name), MAX(age) FROM t;
mysql> UPDATE t SET i = DEFAULT(i)+1 WHERE id < 100;
mysql> SELECT * FROM t1;+------+-------+----------+| name | size | quantity |+------+-------+----------+| ball | small | 10 || ball | large | 20 || ball | NULL | 5 || hoop | small | 15 || hoop | large | 5 || hoop | NULL | 3 |+------+-------+----------+
mysql> SELECT name, size, SUM(quantity) AS quantityFROM t1GROUP BY name, size;+------+-------+----------+| name | size | quantity |+------+-------+----------+| ball | small | 10 || ball | large | 20 || ball | NULL | 5 || hoop | small | 15 || hoop | large | 5 || hoop | NULL | 3 |+------+-------+----------+
mysql> SELECT name, size, SUM(quantity) AS quantityFROM t1GROUP BY name, size WITH ROLLUP;+------+-------+----------+| name | size | quantity |+------+-------+----------+| ball | NULL | 5 || ball | large | 20 || ball | small | 10 || ball | NULL | 35 || hoop | NULL | 3 || hoop | large | 5 || hoop | small | 15 || hoop | NULL | 23 || NULL | NULL | 58 |+------+-------+----------+
mysql> SELECTname, size, SUM(quantity) AS quantity,GROUPING(name) AS grp_name,GROUPING(size) AS grp_sizeFROM t1GROUP BY name, size WITH ROLLUP;+------+-------+----------+----------+----------+| name | size | quantity | grp_name | grp_size |+------+-------+----------+----------+----------+| ball | NULL | 5 | 0 | 0 || ball | large | 20 | 0 | 0 || ball | small | 10 | 0 | 0 || ball | NULL | 35 | 0 | 1 || hoop | NULL | 3 | 0 | 0 || hoop | large | 5 | 0 | 0 || hoop | small | 15 | 0 | 0 || hoop | NULL | 23 | 0 | 1 || NULL | NULL | 58 | 1 | 1 |+------+-------+----------+----------+----------+
mysql> SELECTIF(GROUPING(name) = 1, 'All items', name) AS name,IF(GROUPING(size) = 1, 'All sizes', size) AS size,SUM(quantity) AS quantityFROM t1GROUP BY name, size WITH ROLLUP;+-----------+-----------+----------+| name | size | quantity |+-----------+-----------+----------+| ball | NULL | 5 || ball | large | 20 || ball | small | 10 || ball | All sizes | 35 || hoop | NULL | 3 || hoop | large | 5 || hoop | small | 15 || hoop | All sizes | 23 || All items | All sizes | 58 |+-----------+-----------+----------+
mysql> SELECT name, size, SUM(quantity) AS quantityFROM t1GROUP BY name, size WITH ROLLUPHAVING GROUPING(name) = 1 OR GROUPING(size) = 1;+------+------+----------+| name | size | quantity |+------+------+----------+| ball | NULL | 35 || hoop | NULL | 23 || NULL | NULL | 58 |+------+------+----------+
result for GROUPING(expr3)+ result for GROUPING(expr2) << 1+ result for GROUPING(expr1) << 2
mysql> SELECTname, size, SUM(quantity) AS quantity,GROUPING(name) AS grp_name,GROUPING(size) AS grp_size,GROUPING(name, size) AS grp_allFROM t1GROUP BY name, size WITH ROLLUP;+------+-------+----------+----------+----------+---------+| name | size | quantity | grp_name | grp_size | grp_all |+------+-------+----------+----------+----------+---------+| ball | NULL | 5 | 0 | 0 | 0 || ball | large | 20 | 0 | 0 | 0 || ball | small | 10 | 0 | 0 | 0 || ball | NULL | 35 | 0 | 1 | 1 || hoop | NULL | 3 | 0 | 0 | 0 || hoop | large | 5 | 0 | 0 | 0 || hoop | small | 15 | 0 | 0 | 0 || hoop | NULL | 23 | 0 | 1 | 1 || NULL | NULL | 58 | 1 | 1 | 3 |+------+-------+----------+----------+----------+---------+
mysql> SELECT name, size, SUM(quantity) AS quantityFROM t1GROUP BY name, size WITH ROLLUPHAVING GROUPING(name, size) <> 0;+------+------+----------+| name | size | quantity |+------+------+----------+| ball | NULL | 35 || hoop | NULL | 23 || NULL | NULL | 58 |+------+------+----------+
mysql> SELECT GROUPING((SELECT MAX(name) FROM t1))FROM t1GROUP BY (SELECT MAX(name) FROM t1) WITH ROLLUP;ERROR 3580 (HY000): Argument #1 of GROUPING function is not in GROUP BY
SELECT a AS f1, 'w' AS f2FROM tGROUP BY f1, f2 WITH ROLLUPHAVING GROUPING(f2) = 1;
文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




