olap.result
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:14k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. drop table if exists t1,t2;
  2. create table t1 (product varchar(32), country_id int not null, year int, profit int);
  3. insert into t1  values ( 'Computer', 2,2000, 1200),
  4. ( 'TV', 1, 1999, 150),
  5. ( 'Calculator', 1, 1999,50),
  6. ( 'Computer', 1, 1999,1500),
  7. ( 'Computer', 1, 2000,1500),
  8. ( 'TV', 1, 2000, 150),
  9. ( 'TV', 2, 2000, 100),
  10. ( 'TV', 2, 2000, 100),
  11. ( 'Calculator', 1, 2000,75),
  12. ( 'Calculator', 2, 2000,75),
  13. ( 'TV', 1, 1999, 100),
  14. ( 'Computer', 1, 1999,1200),
  15. ( 'Computer', 2, 2000,1500),
  16. ( 'Calculator', 2, 2000,75),
  17. ( 'Phone', 3, 2003,10)
  18. ;
  19. create table t2 (country_id int primary key, country char(20) not null);
  20. insert into t2 values (1, 'USA'),(2,'India'), (3,'Finland');
  21. select product, sum(profit) from t1 group by product;
  22. product sum(profit)
  23. Calculator 275
  24. Computer 6900
  25. Phone 10
  26. TV 600
  27. select product, sum(profit) from t1 group by product with rollup;
  28. product sum(profit)
  29. Calculator 275
  30. Computer 6900
  31. Phone 10
  32. TV 600
  33. NULL 7785
  34. select product, sum(profit) from t1 group by 1 with rollup;
  35. product sum(profit)
  36. Calculator 275
  37. Computer 6900
  38. Phone 10
  39. TV 600
  40. NULL 7785
  41. select product, sum(profit),avg(profit) from t1 group by product with rollup;
  42. product sum(profit) avg(profit)
  43. Calculator 275 68.7500
  44. Computer 6900 1380.0000
  45. Phone 10 10.0000
  46. TV 600 120.0000
  47. NULL 7785 519.0000
  48. select product, country_id , year, sum(profit) from t1 group by product, country_id, year;
  49. product country_id year sum(profit)
  50. Calculator 1 1999 50
  51. Calculator 1 2000 75
  52. Calculator 2 2000 150
  53. Computer 1 1999 2700
  54. Computer 1 2000 1500
  55. Computer 2 2000 2700
  56. Phone 3 2003 10
  57. TV 1 1999 250
  58. TV 1 2000 150
  59. TV 2 2000 200
  60. select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup;
  61. product country_id year sum(profit)
  62. Calculator 1 1999 50
  63. Calculator 1 2000 75
  64. Calculator 1 NULL 125
  65. Calculator 2 2000 150
  66. Calculator 2 NULL 150
  67. Calculator NULL NULL 275
  68. Computer 1 1999 2700
  69. Computer 1 2000 1500
  70. Computer 1 NULL 4200
  71. Computer 2 2000 2700
  72. Computer 2 NULL 2700
  73. Computer NULL NULL 6900
  74. Phone 3 2003 10
  75. Phone 3 NULL 10
  76. Phone NULL NULL 10
  77. TV 1 1999 250
  78. TV 1 2000 150
  79. TV 1 NULL 400
  80. TV 2 2000 200
  81. TV 2 NULL 200
  82. TV NULL NULL 600
  83. NULL NULL NULL 7785
  84. explain extended select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup;
  85. id select_type table type possible_keys key key_len ref rows Extra
  86. 1 SIMPLE t1 ALL NULL NULL NULL NULL 15 Using filesort
  87. Warnings:
  88. Note 1003 select test.t1.product AS `product`,test.t1.country_id AS `country_id`,test.t1.year AS `year`,sum(test.t1.profit) AS `sum(profit)` from test.t1 group by test.t1.product,test.t1.country_id,test.t1.year with rollup
  89. select product, country_id , sum(profit) from t1 group by product desc, country_id with rollup;
  90. product country_id sum(profit)
  91. TV 1 400
  92. TV 2 200
  93. TV NULL 600
  94. Phone 3 10
  95. Phone NULL 10
  96. Computer 1 4200
  97. Computer 2 2700
  98. Computer NULL 6900
  99. Calculator 1 125
  100. Calculator 2 150
  101. Calculator NULL 275
  102. NULL NULL 7785
  103. select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup limit 5;
  104. product country_id year sum(profit)
  105. Calculator 1 1999 50
  106. Calculator 1 2000 75
  107. Calculator 1 NULL 125
  108. Calculator 2 2000 150
  109. Calculator 2 NULL 150
  110. select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup limit 3,3;
  111. product country_id year sum(profit)
  112. Calculator 2 2000 150
  113. Calculator 2 NULL 150
  114. Calculator NULL NULL 275
  115. select product, country_id, count(*), count(distinct year) from t1 group by product, country_id;
  116. product country_id count(*) count(distinct year)
  117. Calculator 1 2 2
  118. Calculator 2 2 1
  119. Computer 1 3 2
  120. Computer 2 2 1
  121. Phone 3 1 1
  122. TV 1 3 2
  123. TV 2 2 1
  124. select product, country_id, count(*), count(distinct year) from t1 group by product, country_id with rollup;
  125. product country_id count(*) count(distinct year)
  126. Calculator 1 2 2
  127. Calculator 2 2 1
  128. Calculator NULL 4 2
  129. Computer 1 3 2
  130. Computer 2 2 1
  131. Computer NULL 5 2
  132. Phone 3 1 1
  133. Phone NULL 1 1
  134. TV 1 3 2
  135. TV 2 2 1
  136. TV NULL 5 2
  137. NULL NULL 15 3
  138. select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup having country_id = 1;
  139. product country_id year sum(profit)
  140. Calculator 1 1999 50
  141. Calculator 1 2000 75
  142. Calculator 1 NULL 125
  143. Computer 1 1999 2700
  144. Computer 1 2000 1500
  145. Computer 1 NULL 4200
  146. TV 1 1999 250
  147. TV 1 2000 150
  148. TV 1 NULL 400
  149. select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup having sum(profit) > 200;
  150. product country_id year sum(profit)
  151. Calculator NULL NULL 275
  152. Computer 1 1999 2700
  153. Computer 1 2000 1500
  154. Computer 1 NULL 4200
  155. Computer 2 2000 2700
  156. Computer 2 NULL 2700
  157. Computer NULL NULL 6900
  158. TV 1 1999 250
  159. TV 1 NULL 400
  160. TV NULL NULL 600
  161. NULL NULL NULL 7785
  162. select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup having sum(profit) > 7000;
  163. product country_id year sum(profit)
  164. NULL NULL NULL 7785
  165. select concat(product,':',country_id) as 'prod', concat(":",year,":") as 'year',1+1, sum(profit)/count(*) from t1 group by 1,2 with rollup;
  166. prod year 1+1 sum(profit)/count(*)
  167. Calculator:1 :1999: 2 50.00
  168. Calculator:1 :2000: 2 75.00
  169. Calculator:1 NULL 2 62.50
  170. Calculator:2 :2000: 2 75.00
  171. Calculator:2 NULL 2 75.00
  172. Computer:1 :1999: 2 1350.00
  173. Computer:1 :2000: 2 1500.00
  174. Computer:1 NULL 2 1400.00
  175. Computer:2 :2000: 2 1350.00
  176. Computer:2 NULL 2 1350.00
  177. Phone:3 :2003: 2 10.00
  178. Phone:3 NULL 2 10.00
  179. TV:1 :1999: 2 125.00
  180. TV:1 :2000: 2 150.00
  181. TV:1 NULL 2 133.33
  182. TV:2 :2000: 2 100.00
  183. TV:2 NULL 2 100.00
  184. NULL NULL 2 519.00
  185. select product, sum(profit)/count(*) from t1 group by product with rollup;
  186. product sum(profit)/count(*)
  187. Calculator 68.75
  188. Computer 1380.00
  189. Phone 10.00
  190. TV 120.00
  191. NULL 519.00
  192. select left(product,4) as prod, sum(profit)/count(*) from t1 group by prod with rollup;
  193. prod sum(profit)/count(*)
  194. Calc 68.75
  195. Comp 1380.00
  196. Phon 10.00
  197. TV 120.00
  198. NULL 519.00
  199. select concat(product,':',country_id), 1+1, sum(profit)/count(*) from t1 group by concat(product,':',country_id) with rollup;
  200. concat(product,':',country_id) 1+1 sum(profit)/count(*)
  201. Calculator:1 2 62.50
  202. Calculator:2 2 75.00
  203. Computer:1 2 1400.00
  204. Computer:2 2 1350.00
  205. Phone:3 2 10.00
  206. TV:1 2 133.33
  207. TV:2 2 100.00
  208. NULL 2 519.00
  209. select product, country , year, sum(profit) from t1,t2 where t1.country_id=t2.country_id group by product, country, year with rollup;
  210. product country year sum(profit)
  211. Calculator India 2000 150
  212. Calculator India NULL 150
  213. Calculator USA 1999 50
  214. Calculator USA 2000 75
  215. Calculator USA NULL 125
  216. Calculator NULL NULL 275
  217. Computer India 2000 2700
  218. Computer India NULL 2700
  219. Computer USA 1999 2700
  220. Computer USA 2000 1500
  221. Computer USA NULL 4200
  222. Computer NULL NULL 6900
  223. Phone Finland 2003 10
  224. Phone Finland NULL 10
  225. Phone NULL NULL 10
  226. TV India 2000 200
  227. TV India NULL 200
  228. TV USA 1999 250
  229. TV USA 2000 150
  230. TV USA NULL 400
  231. TV NULL NULL 600
  232. NULL NULL NULL 7785
  233. select product, `sum` from (select product, sum(profit) as 'sum' from t1 group by product with rollup) as tmp where product is null;
  234. product sum
  235. NULL 7785
  236. select product from t1 where exists (select product, country_id , sum(profit) from t1 as t2 where t1.product=t2.product group by product, country_id with rollup having sum(profit) > 6000);
  237. product
  238. Computer
  239. Computer
  240. Computer
  241. Computer
  242. Computer
  243. select product, country_id , year, sum(profit) from t1 group by product, country_id, year having country_id is NULL;
  244. product country_id year sum(profit)
  245. select concat(':',product,':'), sum(profit),avg(profit) from t1 group by product with rollup;
  246. concat(':',product,':') sum(profit) avg(profit)
  247. :Calculator: 275 68.7500
  248. :Computer: 6900 1380.0000
  249. :Phone: 10 10.0000
  250. :TV: 600 120.0000
  251. NULL 7785 519.0000
  252. select product, country_id , year, sum(profit) from t1 group by product, country_id, year with cube;
  253. ERROR 42000: This version of MySQL doesn't yet support 'CUBE'
  254. explain select product, country_id , year, sum(profit) from t1 group by product, country_id, year with cube;
  255. ERROR 42000: This version of MySQL doesn't yet support 'CUBE'
  256. select product, country_id , year, sum(profit) from t1 group by product, country_id, year with cube union all select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup;
  257. ERROR 42000: This version of MySQL doesn't yet support 'CUBE'
  258. drop table t1,t2;
  259. CREATE TABLE t1 (i int);
  260. INSERT INTO t1 VALUES(100);
  261. CREATE TABLE t2 (i int);
  262. INSERT INTO t2 VALUES (100),(200);
  263. SELECT i, COUNT(*) FROM t1 GROUP BY i WITH ROLLUP;
  264. i COUNT(*)
  265. 100 1
  266. NULL 1
  267. SELECT t1.i, t2.i, COUNT(*) FROM t1,t2 GROUP BY t1.i,t2.i WITH ROLLUP;
  268. i i COUNT(*)
  269. 100 100 1
  270. 100 200 1
  271. 100 NULL 2
  272. NULL NULL 2
  273. drop table t1,t2;
  274. CREATE TABLE user_day(
  275. user_id INT NOT NULL,
  276. date DATE NOT NULL,
  277. UNIQUE INDEX user_date (user_id, date)
  278. );
  279. INSERT INTO user_day VALUES
  280. (1, '2004-06-06' ),
  281. (1, '2004-06-07' ),
  282. (2, '2004-06-06' );
  283. SELECT
  284. d.date AS day,
  285. COUNT(d.user_id) as sample,
  286. COUNT(next_day.user_id) AS not_cancelled
  287. FROM user_day d
  288. LEFT JOIN user_day next_day 
  289. ON next_day.user_id=d.user_id AND 
  290. next_day.date= DATE_ADD( d.date, interval 1 day )
  291. GROUP BY day;
  292. day sample not_cancelled
  293. 2004-06-06 2 1
  294. 2004-06-07 1 0
  295. SELECT
  296. d.date AS day,
  297. COUNT(d.user_id) as sample,
  298. COUNT(next_day.user_id) AS not_cancelled
  299. FROM user_day d
  300. LEFT JOIN user_day next_day 
  301. ON next_day.user_id=d.user_id AND 
  302. next_day.date= DATE_ADD( d.date, interval 1 day )
  303. GROUP BY day
  304. WITH ROLLUP;
  305. day sample not_cancelled
  306. 2004-06-06 2 1
  307. 2004-06-07 1 0
  308. NULL 3 1
  309. DROP TABLE user_day;
  310. CREATE TABLE t1 (a int, b int);
  311. INSERT INTO t1 VALUES
  312. (1,4),
  313. (2,2), (2,2),
  314. (4,1), (4,1), (4,1), (4,1),
  315. (2,1), (2,1);
  316. SELECT SUM(b) FROM t1 GROUP BY a WITH ROLLUP;
  317. SUM(b)
  318. 4
  319. 6
  320. 4
  321. 14
  322. SELECT DISTINCT SUM(b) FROM t1 GROUP BY a WITH ROLLUP;
  323. SUM(b)
  324. 4
  325. 6
  326. 14
  327. SELECT SUM(b), COUNT(DISTINCT b) FROM t1 GROUP BY a WITH ROLLUP;
  328. SUM(b) COUNT(DISTINCT b)
  329. 4 1
  330. 6 2
  331. 4 1
  332. 14 3
  333. SELECT DISTINCT SUM(b), COUNT(DISTINCT b) FROM t1 GROUP BY a WITH ROLLUP;
  334. SUM(b) COUNT(DISTINCT b)
  335. 4 1
  336. 6 2
  337. 14 3
  338. SELECT SUM(b), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP;
  339. SUM(b) COUNT(*)
  340. 4 1
  341. 6 4
  342. 4 4
  343. 14 9
  344. SELECT DISTINCT SUM(b), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP;
  345. SUM(b) COUNT(*)
  346. 4 1
  347. 6 4
  348. 4 4
  349. 14 9
  350. SELECT SUM(b), COUNT(DISTINCT b), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP;
  351. SUM(b) COUNT(DISTINCT b) COUNT(*)
  352. 4 1 1
  353. 6 2 4
  354. 4 1 4
  355. 14 3 9
  356. SELECT DISTINCT SUM(b), COUNT(DISTINCT b), COUNT(*) FROM t1
  357. GROUP BY a WITH ROLLUP;
  358. SUM(b) COUNT(DISTINCT b) COUNT(*)
  359. 4 1 1
  360. 6 2 4
  361. 4 1 4
  362. 14 3 9
  363. SELECT a, sum(b) FROM t1 GROUP BY a,b WITH ROLLUP;
  364. a sum(b)
  365. 1 4
  366. 1 4
  367. 2 2
  368. 2 4
  369. 2 6
  370. 4 4
  371. 4 4
  372. NULL 14
  373. SELECT DISTINCT a, sum(b) FROM t1 GROUP BY a,b WITH ROLLUP;
  374. a sum(b)
  375. 1 4
  376. 2 2
  377. 2 4
  378. 2 6
  379. 4 4
  380. NULL 14
  381. DROP TABLE t1;
  382. CREATE TABLE t1 (a int, b int);
  383. INSERT INTO t1 VALUES
  384. (1,4),
  385. (2,2), (2,2),
  386. (4,1), (4,1), (4,1), (4,1),
  387. (2,1), (2,1);
  388. SELECT a, SUM(b) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1;
  389. a SUM(b)
  390. 1 4
  391. SELECT SQL_CALC_FOUND_ROWS a, SUM(b) FROM t1 GROUP BY a WITH ROLLUP LIMIT 1;
  392. a SUM(b)
  393. 1 4
  394. DROP TABLE t1;
  395. CREATE TABLE t1 (a int(11) NOT NULL);
  396. INSERT INTO t1 VALUES (1),(2);
  397. SELECT a, SUM(a) m FROM  t1 GROUP BY a WITH ROLLUP;
  398. a m
  399. 1 1
  400. 2 2
  401. NULL 3
  402. SELECT * FROM ( SELECT a, SUM(a) m FROM  t1 GROUP BY a WITH ROLLUP ) t2;
  403. a m
  404. 1 1
  405. 2 2
  406. NULL 3
  407. DROP TABLE t1;
  408. CREATE TABLE t1 (a int(11));
  409. INSERT INTO t1 VALUES (1),(2);
  410. SELECT a, SUM(a), SUM(a)+1 FROM (SELECT a FROM t1 UNION select 2) d 
  411. GROUP BY a;
  412. a SUM(a) SUM(a)+1
  413. 1 1 2
  414. 2 2 3
  415. SELECT a, SUM(a), SUM(a)+1 FROM (SELECT a FROM t1 UNION select 2) d 
  416. GROUP BY a WITH ROLLUP;
  417. a SUM(a) SUM(a)+1
  418. 1 1 2
  419. 2 2 3
  420. NULL 3 4
  421. SELECT a, SUM(a), SUM(a)+1 FROM (SELECT 1 a UNION select 2) d 
  422. GROUP BY a;
  423. a SUM(a) SUM(a)+1
  424. 1 1 2
  425. 2 2 3
  426. SELECT a, SUM(a), SUM(a)+1 FROM (SELECT 1 a UNION select 2) d 
  427. GROUP BY a WITH ROLLUP;
  428. a SUM(a) SUM(a)+1
  429. 1 1 2
  430. 2 2 3
  431. NULL 3 4
  432. SELECT a, SUM(a), SUM(a)+1, CONCAT(SUM(a),'x'), SUM(a)+SUM(a), SUM(a)
  433. FROM (SELECT 1 a, 2 b UNION SELECT 2,3 UNION SELECT 5,6 ) d
  434. GROUP BY a WITH ROLLUP;
  435. a SUM(a) SUM(a)+1 CONCAT(SUM(a),'x') SUM(a)+SUM(a) SUM(a)
  436. 1 1 2 1x 2 1
  437. 2 2 3 2x 4 2
  438. 5 5 6 5x 10 5
  439. NULL 8 9 8x 16 8
  440. DROP TABLE t1;
  441. CREATE TABLE t1 (a int(11));
  442. INSERT INTO t1 VALUES (1),(2);
  443. SELECT a, a+1, SUM(a) FROM t1 GROUP BY a WITH ROLLUP;
  444. a a+1 SUM(a)
  445. 1 2 1
  446. 2 3 2
  447. NULL NULL 3
  448. SELECT a+1 FROM t1 GROUP BY a WITH ROLLUP;
  449. a+1
  450. 2
  451. 3
  452. NULL
  453. SELECT a+SUM(a) FROM t1 GROUP BY a WITH ROLLUP;
  454. a+SUM(a)
  455. 2
  456. 4
  457. NULL
  458. SELECT a, a+1 as b FROM t1 GROUP BY a WITH ROLLUP HAVING b > 2;
  459. a b
  460. 2 3
  461. SELECT a, a+1 as b FROM t1 GROUP BY a WITH ROLLUP HAVING a IS NULL;
  462. a b
  463. NULL NULL
  464. SELECT a, a+1 as b FROM t1 GROUP BY a WITH ROLLUP HAVING b IS NULL;
  465. a b
  466. NULL NULL
  467. SELECT IFNULL(a, 'TEST') FROM t1 GROUP BY a WITH ROLLUP;
  468. IFNULL(a, 'TEST')
  469. 1
  470. 2
  471. TEST
  472. CREATE TABLE t2 (a int, b int);
  473. INSERT INTO t2 VALUES
  474. (1,4),
  475. (2,2), (2,2),
  476. (4,1), (4,1), (4,1), (4,1),
  477. (2,1), (2,1);
  478. SELECT a,b,SUM(b) FROM t2 GROUP BY a,b WITH ROLLUP;
  479. a b SUM(b)
  480. 1 4 4
  481. 1 NULL 4
  482. 2 1 2
  483. 2 2 4
  484. 2 NULL 6
  485. 4 1 4
  486. 4 NULL 4
  487. NULL NULL 14
  488. SELECT a,b,SUM(b), a+b as c FROM t2
  489. GROUP BY a,b WITH ROLLUP HAVING c IS NULL;
  490. a b SUM(b) c
  491. 1 NULL 4 NULL
  492. 2 NULL 6 NULL
  493. 4 NULL 4 NULL
  494. NULL NULL 14 NULL
  495. SELECT IFNULL(a, 'TEST'), COALESCE(b, 'TEST') FROM t2 
  496. GROUP BY a, b WITH ROLLUP;
  497. IFNULL(a, 'TEST') COALESCE(b, 'TEST')
  498. 1 4
  499. 1 TEST
  500. 2 1
  501. 2 2
  502. 2 TEST
  503. 4 1
  504. 4 TEST
  505. TEST TEST
  506. DROP TABLE t1,t2;
  507. CREATE TABLE t1 (a INT(10) NOT NULL, b INT(10) NOT NULL);
  508. INSERT INTO t1 VALUES (1, 1);
  509. INSERT INTO t1 VALUES (1, 2);
  510. SELECT a, b, a AS c, COUNT(*) AS count FROM t1 GROUP BY a, b, c WITH ROLLUP;
  511. a b c count
  512. 1 1 1 1
  513. 1 1 NULL 1
  514. 1 2 1 1
  515. 1 2 NULL 1
  516. 1 NULL NULL 2
  517. NULL NULL NULL 2
  518. DROP TABLE t1;
  519. CREATE TABLE t1 (a int(11) NOT NULL);
  520. INSERT INTO t1 VALUES (1),(2);
  521. SELECT * FROM (SELECT a, a + 1, COUNT(*) FROM t1 GROUP BY a WITH ROLLUP) t;
  522. a a + 1 COUNT(*)
  523. 1 2 1
  524. 2 3 1
  525. NULL NULL 2
  526. SELECT * FROM (SELECT a, LENGTH(a), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP) t;
  527. a LENGTH(a) COUNT(*)
  528. 1 1 1
  529. 2 1 1
  530. NULL NULL 2
  531. DROP TABLE t1;
  532. create table t1 ( a varchar(9), b int );
  533. insert into t1 values('a',1),(null,2);
  534. select a, max(b) from t1 group by a with rollup;
  535. a max(b)
  536. NULL 2
  537. a 1
  538. NULL 2
  539. select distinct a, max(b) from t1 group by a with rollup;
  540. a max(b)
  541. NULL 2
  542. a 1
  543. drop table t1;