一、Mysql中sum和group by聯用求和為什么會計算不準確
因為在MySQL中,GROUP BY 語句根據一個或多個列對結果集進行分組。在分組的列上我們可以使用 COUNT, SUM, AVG,等函數。WITH ROLLUP 可以實現在分組統計數據基礎上再進行相同的統計(SUM,AVG,COUNT…)。
GROUP BY 語法
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
實例演示
本章節實例使用到了以下表結構及數據,使用前我們可以先將以下數據導入數據庫中。
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
— —————————-
—? Table structure for employee_tbl
— —————————-
DROP TABLE IF EXISTS employee_tbl;
CREATE TABLE employee_tbl (
? id int(11) NOT NULL,
? name char(10) NOT NULL DEFAULT ”,
? date datetime NOT NULL,
? signin tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘登錄次數’,
? PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
— —————————-
—? Records of employee_tbl
— —————————-
BEGIN;
INSERT INTO employee_tbl VALUES (‘1’, ‘小明’, ‘2016-04-22 15:25:33’, ‘1’), (‘2’, ‘小王’, ‘2016-04-20 15:25:47’, ‘3’), (‘3’, ‘小麗’, ‘2016-04-19 15:26:02’, ‘2’), (‘4’, ‘小王’, ‘2016-04-07 15:26:14’, ‘4’), (‘5’, ‘小明’, ‘2016-04-11 15:26:40’, ‘4’), (‘6’, ‘小明’, ‘2016-04-04 15:26:54’, ‘2’);
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
導入成功后,執行以下 SQL 語句:
mysql> set names utf8;
mysql> SELECT * FROM employee_tbl;
+—-+——–+———————+——–+
| id | name?? | date??????????????? | signin |
+—-+——–+———————+——–+
|? 1 | 小明 | 2016-04-22 15:25:33 |????? 1 |
|? 2 | 小王 | 2016-04-20 15:25:47 |????? 3 |
|? 3 | 小麗 | 2016-04-19 15:26:02 |????? 2 |
|? 4 | 小王 | 2016-04-07 15:26:14 |????? 4 |
|? 5 | 小明 | 2016-04-11 15:26:40 |????? 4 |
|? 6 | 小明 | 2016-04-04 15:26:54 |????? 2 |
+—-+——–+———————+——–+
6 rows in set (0.00 sec)
接下來我們使用 GROUP BY 語句 將數據表按名字進行分組,并統計每個人有多少條記錄:
mysql> SELECT name, COUNT(*) FROM?? employee_tbl GROUP BY name;
+——–+———-+
| name?? | COUNT(*) |
+——–+———-+
| 小麗 |??????? 1 |
| 小明 |??????? 3 |
| 小王 |??????? 2 |
+——–+———-+
3 rows in set (0.01 sec)
WITH ROLLUP 可以實現在分組統計數據基礎上再進行相同的統計(SUM,AVG,COUNT…),使用 WITH ROLLUP,此函數是對聚合函數進行求和,注意 with rollup是對 group by 后的名列前茅個字段,進行分組求和。
延伸閱讀:
二、數據庫和 SQL 概念
數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,它的產生距今已有六十多年。隨著信息技術和市場的發展,數據庫變得無處不在:它在電子商務、銀行系統等眾多領域都被廣泛使用,且成為其系統的重要組成部分。
數據庫用于記錄數據,使用數據庫記錄數據可以表現出各種數據間的聯系,也可以很方便地對所記錄的數據進行增、刪、改、查等操作。
結構化查詢語言(Structured Query Language)簡稱 SQL,是上世紀 70 年代由 IBM 公司開發,用于對數據庫進行操作的語言。更詳細地說,SQL 是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統,同時也是數據庫腳本文件的擴展名。