96 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			96 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Various tests for SUM(DISTINCT ...)
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								--disable_warnings
							 | 
						||
| 
								 | 
							
								DROP TABLE IF EXISTS t1, t2;
							 | 
						||
| 
								 | 
							
								--enable_warnings
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								CREATE TABLE t1 (
							 | 
						||
| 
								 | 
							
								  id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, 
							 | 
						||
| 
								 | 
							
								  gender CHAR(1),
							 | 
						||
| 
								 | 
							
								  name VARCHAR(20)
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# According to ANSI SQL, SUM(DISTINCT ...) should return NULL for empty
							 | 
						||
| 
								 | 
							
								# record set
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SELECT SUM(DISTINCT LENGTH(name)) s1 FROM t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# According to ANSI SQL, SUM(DISTINCT ...) should return NULL for records sets
							 | 
						||
| 
								 | 
							
								# entirely consisting of NULLs
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 (gender, name) VALUES (NULL, NULL);
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 (gender, name) VALUES (NULL, NULL);
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 (gender, name) VALUES (NULL, NULL);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SELECT SUM(DISTINCT LENGTH(name)) s1 FROM t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Filling table with t1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 (gender, name) VALUES ('F', 'Helen'), ('F', 'Anastasia'),
							 | 
						||
| 
								 | 
							
								('F', 'Katherine'), ('F', 'Margo'), ('F', 'Magdalene'), ('F', 'Mary');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								CREATE TABLE t2 SELECT name FROM t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SELECT (SELECT SUM(DISTINCT LENGTH(name)) FROM t1) FROM t2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DROP TABLE t2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								INSERT INTO t1 (gender, name) VALUES ('F', 'Eva'), ('F', 'Sofia'),
							 | 
						||
| 
								 | 
							
								('F', 'Sara'), ('F', 'Golda'), ('F', 'Toba'), ('F', 'Victory'),
							 | 
						||
| 
								 | 
							
								('F', 'Faina'), ('F', 'Miriam'), ('F', 'Beki'), ('F', 'America'),
							 | 
						||
| 
								 | 
							
								('F', 'Susan'), ('F', 'Glory'), ('F', 'Priscilla'), ('F', 'Rosmary'),
							 | 
						||
| 
								 | 
							
								('F', 'Rose'), ('F', 'Margareth'), ('F', 'Elizabeth'), ('F', 'Meredith'),
							 | 
						||
| 
								 | 
							
								('F', 'Julie'), ('F', 'Xenia'), ('F', 'Zena'), ('F', 'Olga'),
							 | 
						||
| 
								 | 
							
								('F', 'Brunhilda'), ('F', 'Nataly'), ('F', 'Lara'), ('F', 'Svetlana'),
							 | 
						||
| 
								 | 
							
								('F', 'Grethem'), ('F', 'Irene');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SELECT
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT LENGTH(name)) s1,
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT SUBSTRING(NAME, 1, 3)) s2,
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT LENGTH(SUBSTRING(name, 1, 4))) s3
							 | 
						||
| 
								 | 
							
								FROM t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SELECT
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT LENGTH(g1.name)) s1,
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT SUBSTRING(g2.name, 1, 3)) s2,
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT LENGTH(SUBSTRING(g3.name, 1, 4))) s3
							 | 
						||
| 
								 | 
							
								FROM t1 g1, t1 g2, t1 g3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SELECT
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT LENGTH(g1.name)) s1,
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT SUBSTRING(g2.name, 1, 3)) s2,
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT LENGTH(SUBSTRING(g3.name, 1, 4))) s3
							 | 
						||
| 
								 | 
							
								FROM t1 g1, t1 g2, t1 g3 GROUP BY LENGTH(SUBSTRING(g3.name, 5, 10));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# here we explicitly request summing through temporary table (so
							 | 
						||
| 
								 | 
							
								# Item_sum_sum_distinct::copy_or_same() is called)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SELECT SQL_BUFFER_RESULT
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT LENGTH(name)) s1,
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT SUBSTRING(NAME, 1, 3)) s2,
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT LENGTH(SUBSTRING(name, 1, 4))) s3
							 | 
						||
| 
								 | 
							
								FROM t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SELECT SQL_BUFFER_RESULT
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT LENGTH(g1.name)) s1,
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT SUBSTRING(g2.name, 1, 3)) s2,
							 | 
						||
| 
								 | 
							
								  SUM(DISTINCT LENGTH(SUBSTRING(g3.name, 1, 4))) s3
							 | 
						||
| 
								 | 
							
								FROM t1 g1, t1 g2, t1 g3 GROUP BY LENGTH(SUBSTRING(g3.name, 5, 10));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# this test demonstrates that strings are automatically converted to numbers
							 | 
						||
| 
								 | 
							
								# before summing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SET @l=1;
							 | 
						||
| 
								 | 
							
								UPDATE t1 SET name=CONCAT(name, @l:=@l+1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SELECT SUM(DISTINCT RIGHT(name, 1)) FROM t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# this is a test case for ordinary t1 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SELECT SUM(DISTINCT id) FROM t1;
							 | 
						||
| 
								 | 
							
								SELECT SUM(DISTINCT id % 11) FROM t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DROP TABLE t1;
							 |