📄 group_by.result
字号:
drop table t1;CREATE TABLE t1 (`a` char(193) default NULL,`b` char(63) default NULL);INSERT INTO t1 VALUES ('abc','def'),('hij','klm');SELECT CONCAT(a, b) FROM t1 GROUP BY 1;CONCAT(a, b)abcdefhijklmSELECT CONCAT(a, b),count(*) FROM t1 GROUP BY 1;CONCAT(a, b) count(*)abcdef 1hijklm 1SELECT CONCAT(a, b),count(distinct a) FROM t1 GROUP BY 1;CONCAT(a, b) count(distinct a)abcdef 1hijklm 1SELECT 1 FROM t1 GROUP BY CONCAT(a, b);111INSERT INTO t1 values ('hij','klm');SELECT CONCAT(a, b),count(*) FROM t1 GROUP BY 1;CONCAT(a, b) count(*)abcdef 1hijklm 2DROP TABLE t1;create table t1 (One int unsigned, Two int unsigned, Three int unsigned, Four int unsigned);insert into t1 values (1,2,1,4),(1,2,2,4),(1,2,3,4),(1,2,4,4),(1,1,1,4),(1,1,2,4),(1,1,3,4),(1,1,4,4),(1,3,1,4),(1,3,2,4),(1,3,3,4),(1,3,4,4);select One, Two, sum(Four) from t1 group by One,Two;One Two sum(Four)1 1 161 2 161 3 16drop table t1;create table t1 (id integer primary key not null auto_increment, gender char(1));insert into t1 values (NULL, 'M'), (NULL, 'F'),(NULL, 'F'),(NULL, 'F'),(NULL, 'M');create table t2 (user_id integer not null, date date);insert into t2 values (1, '2002-06-09'),(2, '2002-06-09'),(1, '2002-06-09'),(3, '2002-06-09'),(4, '2002-06-09'),(4, '2002-06-09');select u.gender as gender, count(distinct u.id) as dist_count, (count(distinct u.id)/5*100) as percentage from t1 u, t2 l where l.user_id = u.id group by u.gender;gender dist_count percentageF 3 60.0000M 1 20.0000select u.gender as gender, count(distinct u.id) as dist_count, (count(distinct u.id)/5*100) as percentage from t1 u, t2 l where l.user_id = u.id group by u.gender order by percentage;gender dist_count percentageM 1 20.0000F 3 60.0000drop table t1,t2;CREATE TABLE t1 (ID1 int, ID2 int, ID int NOT NULL AUTO_INCREMENT,PRIMARY KEY(ID));insert into t1 values (1,244,NULL),(2,243,NULL),(134,223,NULL),(185,186,NULL);select S.ID as xID, S.ID1 as xID1 from t1 as S left join t1 as yS on S.ID1 between yS.ID1 and yS.ID2;xID xID11 12 22 23 1343 1343 1344 1854 1854 1854 185select S.ID as xID, S.ID1 as xID1, repeat('*',count(distinct yS.ID)) as Level from t1 as S left join t1 as yS on S.ID1 between yS.ID1 and yS.ID2 group by xID order by xID1;xID xID1 Level1 1 *2 2 **3 134 ***4 185 ****drop table t1;CREATE TABLE t1 (pid int(11) unsigned NOT NULL default '0',c1id int(11) unsigned default NULL,c2id int(11) unsigned default NULL,value int(11) unsigned NOT NULL default '0',UNIQUE KEY pid2 (pid,c1id,c2id),UNIQUE KEY pid (pid,value)) ENGINE=MyISAM;INSERT INTO t1 VALUES (1, 1, NULL, 1),(1, 2, NULL, 2),(1, NULL, 3, 3),(1, 4, NULL, 4),(1, 5, NULL, 5);CREATE TABLE t2 (id int(11) unsigned NOT NULL default '0',active enum('Yes','No') NOT NULL default 'Yes',PRIMARY KEY (id)) ENGINE=MyISAM;INSERT INTO t2 VALUES (1, 'Yes'),(2, 'No'),(4, 'Yes'),(5, 'No');CREATE TABLE t3 (id int(11) unsigned NOT NULL default '0',active enum('Yes','No') NOT NULL default 'Yes',PRIMARY KEY (id));INSERT INTO t3 VALUES (3, 'Yes');select * from t1 AS m LEFT JOIN t2 AS c1 ON m.c1id = c1.id AND c1.active = 'Yes' LEFT JOIN t3 AS c2 ON m.c2id = c2.id AND c2.active = 'Yes' WHERE m.pid=1 AND (c1.id IS NOT NULL OR c2.id IS NOT NULL);pid c1id c2id value id active id active1 1 NULL 1 1 Yes NULL NULL1 NULL 3 3 NULL NULL 3 Yes1 4 NULL 4 4 Yes NULL NULLselect max(value) from t1 AS m LEFT JOIN t2 AS c1 ON m.c1id = c1.id AND c1.active = 'Yes' LEFT JOIN t3 AS c2 ON m.c2id = c2.id AND c2.active = 'Yes' WHERE m.pid=1 AND (c1.id IS NOT NULL OR c2.id IS NOT NULL);max(value)4drop table t1,t2,t3;create table t1 (a blob null);insert into t1 values (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(""),(""),(""),("b");select a,count(*) from t1 group by a;a count(*)NULL 9 3b 1set option sql_big_tables=1;select a,count(*) from t1 group by a;a count(*)NULL 9 3b 1drop table t1;create table t1 (a int not null, b int not null);insert into t1 values (1,1),(1,2),(3,1),(3,2),(2,2),(2,1);create table t2 (a int not null, b int not null, key(a));insert into t2 values (1,3),(3,1),(2,2),(1,1);select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b;a b1 11 32 23 1select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b ORDER BY NULL;a b1 33 12 21 1explain select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ALL NULL NULL NULL NULL 6 Using temporary; Using filesort1 SIMPLE t2 ALL a NULL NULL NULL 3 Using whereexplain select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b ORDER BY NULL;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ALL NULL NULL NULL NULL 6 Using temporary1 SIMPLE t2 ALL a NULL NULL NULL 3 Using wheredrop table t1,t2;create table t1 (a int, b int);insert into t1 values (1, 4),(10, 40),(1, 4),(10, 43),(1, 4),(10, 41),(1, 4),(10, 43),(1, 4);select a, MAX(b), INTERVAL (MAX(b), 1,3,10,30,39,40,50,60,100,1000) from t1 group by a;a MAX(b) INTERVAL (MAX(b), 1,3,10,30,39,40,50,60,100,1000)1 4 210 43 6select a, MAX(b), CASE MAX(b) when 4 then 4 when 43 then 43 else 0 end from t1 group by a;a MAX(b) CASE MAX(b) when 4 then 4 when 43 then 43 else 0 end1 4 410 43 43select a, MAX(b), FIELD(MAX(b), '43', '4', '5') from t1 group by a;a MAX(b) FIELD(MAX(b), '43', '4', '5')1 4 210 43 1select a, MAX(b), CONCAT_WS(MAX(b), '43', '4', '5') from t1 group by a;a MAX(b) CONCAT_WS(MAX(b), '43', '4', '5')1 4 43444510 43 43434435select a, MAX(b), ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') from t1 group by a;a MAX(b) ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f')1 4 d10 43 NULLselect a, MAX(b), MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') from t1 group by a;a MAX(b) MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')1 4 c10 43 a,b,d,fdrop table t1;create table t1 (id int not null, qty int not null);insert into t1 values (1,2),(1,3),(2,4),(2,5);select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sum(qty)>2 and cqty>1;id sqty cqty1 5 22 9 2select id, sum(qty) as sqty from t1 group by id having sqty>2 and count(qty)>1;id sqty1 52 9select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sqty>2 and cqty>1;id sqty cqty1 5 22 9 2select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sum(qty)>2 and count(qty)>1;id sqty cqty1 5 22 9 2select count(*), case interval(qty,2,3,4,5,6,7,8) when -1 then NULL when 0 then "zero" when 1 then "one" when 2 then "two" end as category from t1 group by category;count(*) category2 NULL1 one1 twoselect count(*), interval(qty,2,3,4,5,6,7,8) as category from t1 group by category;count(*) category1 11 21 31 4drop table t1;CREATE TABLE t1 (userid int(10) unsigned,score smallint(5) unsigned,key (score));INSERT INTO t1 VALUES (1,1),(2,2),(1,1),(3,3),(3,3),(3,3),(3,3),(3,3);SELECT userid,count(*) FROM t1 GROUP BY userid DESC;userid count(*)3 52 11 2EXPLAIN SELECT userid,count(*) FROM t1 GROUP BY userid DESC;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ALL NULL NULL NULL NULL 8 Using temporary; Using filesortDROP TABLE t1;CREATE TABLE t1 (i int(11) default NULL,j int(11) default NULL);INSERT INTO t1 VALUES (1,2),(2,3),(4,5),(3,5),(1,5),(23,5);SELECT i, COUNT(DISTINCT(i)) FROM t1 GROUP BY j ORDER BY NULL;i COUNT(DISTINCT(i))1 12 14 4explain SELECT i, COUNT(DISTINCT(i)) FROM t1 GROUP BY j ORDER BY NULL;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t1 ALL NULL NULL NULL NULL 6 Using filesortDROP TABLE t1;create table t1 (a int);insert into t1 values(null);select min(a) is null from t1;min(a) is null1select min(a) is null or null from t1;min(a) is null or null1select 1 and min(a) is null from t1;1 and min(a) is null1drop table t1;create table t1 ( col1 int, col2 int );insert into t1 values (1,1),(1,2),(1,3),(2,1),(2,2);select group_concat( distinct col1 ) as alias from t1group by col2 having alias like '%';alias1,21,21drop table t1;create table t1 (a integer, b integer, c integer);insert into t1 (a,b) values (1,2),(1,3),(2,5);select a, 0.1*0+1 r2, sum(1) r1 from t1 where a = 1 group by a having r1>1 and r2=1;a r2 r11 1.0 2select a, round(rand(100)*10) r2, sum(1) r1 from t1 where a = 1 group by a having r1>1 and r2<=2;a r2 r11 2 2select a,sum(b) from t1 where a=1 group by c;a sum(b)1 5select a*sum(b) from t1 where a=1 group by c;a*sum(b)5select sum(a)*sum(b) from t1 where a=1 group by c;sum(a)*sum(b)10select a,sum(b) from t1 where a=1 group by c having a=1;a sum(b)1 5select a as d,sum(b) from t1 where a=1 group by c having d=1;d sum(b)1 5select sum(a)*sum(b) as d from t1 where a=1 group by c having d > 0;d10drop table t1;create table t1(a int);insert into t1 values (0),(1),(2),(3),(4),(5),(6),(8),(9);create table t2 (a int,b varchar(200) NOT NULL,c varchar(50) NOT NULL,d varchar(100) NOT NULL,primary key (a,b(132),c,d),key a (a,b)) charset=utf8;insert into t2 select x3.a, -- 3concat('val-', x3.a + 3*x4.a), -- 12concat('val-', @a:=x3.a + 3*x4.a + 12*C.a), -- 120concat('val-', @a + 120*D.a)from t1 x3, t1 x4, t1 C, t1 D where x3.a < 3 and x4.a < 4 and D.a < 4;delete from t2 where a = 2 and b = 'val-2' order by a,b,c,d limit 30;explain select c from t2 where a = 2 and b = 'val-2' group by c;id select_type table type possible_keys key key_len ref rows Extra1 SIMPLE t2 ref PRIMARY,a PRIMARY 402 const,const 6 Using whereselect c from t2 where a = 2 and b = 'val-2' group by c;cval-74val-98drop table t1,t2;create table t1 (b int4 unsigned not null);insert into t1 values(3000000000);select * from t1;b3000000000select min(b) from t1;min(b)3000000000drop table t1;CREATE TABLE t1 (id int PRIMARY KEY, user_id int, hostname longtext);INSERT INTO t1 VALUES(1, 7, 'cache-dtc-af05.proxy.aol.com'),(2, 3, 'what.ever.com'),(3, 7, 'cache-dtc-af05.proxy.aol.com'),(4, 7, 'cache-dtc-af05.proxy.aol.com');SELECT hostname, COUNT(DISTINCT user_id) as no FROM t1WHERE hostname LIKE '%aol%' GROUP BY hostname;hostname nocache-dtc-af05.proxy.aol.com 1DROP TABLE t1;CREATE TABLE t1 (a int, b int);INSERT INTO t1 VALUES (1,2), (1,3);SELECT a, b FROM t1 GROUP BY 'const';a b1 2SELECT DISTINCT a, b FROM t1 GROUP BY 'const';a b1 2DROP TABLE t1;CREATE TABLE t1 (id INT, dt DATETIME);INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );SELECT dt DIV 1 AS f, id FROM t1 GROUP BY f;f id20050501123000 1DROP TABLE t1;CREATE TABLE t1 (id varchar(20) NOT NULL);INSERT INTO t1 VALUES ('trans1'), ('trans2');CREATE TABLE t2 (id varchar(20) NOT NULL, err_comment blob NOT NULL);INSERT INTO t2 VALUES ('trans1', 'a problem');SELECT COUNT(DISTINCT(t1.id)), LEFT(err_comment, 256) AS commentFROM t1 LEFT JOIN t2 ON t1.id=t2.id GROUP BY comment;COUNT(DISTINCT(t1.id)) comment1 NULL1 a problemDROP TABLE t1, t2;create table t1 (f1 date);insert into t1 values('2005-06-06');insert into t1 values('2005-06-06');select date(left(f1+0,8)) from t1 group by 1;date(left(f1+0,8))2005-06-06drop table t1;CREATE TABLE t1 (n int);INSERT INTO t1 VALUES (1);SELECT n+1 AS n FROM t1 GROUP BY n;n2Warnings:Warning 1052 Column 'n' in group statement is ambiguousDROP TABLE t1;create table t1(f1 varchar(5) key);insert into t1 values (1),(2);select sql_buffer_result max(f1) is null from t1;max(f1) is null0select sql_buffer_result max(f1)+1 from t1;max(f1)+13drop table t1;create table t1 (c1 char(3), c2 char(3));create table t2 (c3 char(3), c4 char(3));insert into t1 values ('aaa', 'bb1'), ('aaa', 'bb2');insert into t2 values ('aaa', 'bb1'), ('aaa', 'bb2');select t1.c1 as c2 from t1, t2 where t1.c2 = t2.c4group by c2;c2aaaaaaWarnings:Warning 1052 Column 'c2' in group statement is ambiguousshow warnings;Level Code MessageWarning 1052 Column 'c2' in group statement is ambiguousselect t1.c1 as c2 from t1, t2 where t1.c2 = t2.c4group by t1.c1;c2aaashow warnings;Level Code Messagedrop table t1, t2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -