分組求和,將一列的數據求和


在數據庫操作中常常會將某一列的具有相似性質的數據進行求和,昨天在做的項目中遇到了。
后來請教了一下自己又摸索了一下,得出了解決方案,那就是<strong>分組求和</strong>。
需求:將某列數據求和
例子:

數據庫內容為:

 

根據record_type進行分組再求和,也就是將1、2、3三種類型進行分組,所以結果預期為三行

 

再一種是根據record_date來分組,由於日期有兩組,故預期分組也為兩組,結果為同一日期的c、d列數據相加

 

總結:當需要進行對某一列的具有相似條件(對應於where中的條件)的數據進行合並時,使用group by將記錄分組,再使用聚合函數對數據進行需要的操作。這樣就可以使用一條語句將所有的數據進行分組求和。

 

創建例子中的數據的SQL語句為

 1 CREATE DATABASE /*!32312 IF NOT EXISTS*/`group` /*!40100 DEFAULT CHARACTER SET utf8 */;
 2 
 3 USE `group`;
 4 
 5 /*Table structure for table `test` */
 6 
 7 DROP TABLE IF EXISTS `test`;
 8 
 9 CREATE TABLE `test` (
10   `id` int(10) NOT NULL AUTO_INCREMENT,
11   `record_date` date DEFAULT NULL,
12   `record_type` int(10) DEFAULT NULL,
13   `c` int(10) DEFAULT NULL,
14   `d` int(10) DEFAULT NULL,
15   PRIMARY KEY (`id`)
16 ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
17 
18 /*Data for the table `test` */
19 
20 insert  into `test`(`id`,`record_date`,`record_type`,`c`,`d`) values (1,'2013-10-14',1,1000,10000),(2,'2013-10-15',1,2000,20000),(3,'2013-10-14',2,3000,30000),(4,'2013-10-15',2,4000,40000),(5,'2013-10-14',3,5000,50000);

查詢語句為

SELECT SUM(c) 'c列數據的和',SUM(d)'d列數據的和'
FROM test
WHERE record_date BETWEEN '2013-10-13' AND '2013-10-16'    
GROUP BY record_type
ORDER BY record_type ASC

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM