Колдонуу боюнча MySQL суммасы тобу? MySQL маалымат базасында сан боюнча топтун деталдуу түшүндүрмөсү

MySQLде SUM GROUP BY функциясын кантип колдонсо болот ? MySQL маалымат базасында GROUP BY COUNT функциясынын кеңири түшүндүрмөсү.

MySQL GROUP BY билдирүү

GROUP BY оператору натыйжалар топтомун бир же бир нече мамычанын негизинде топтойт.

Топтолгон тилкеде биз COUNT, SUM, AVG ж.б. функцияларды колдоно алабыз.

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,
  `singin` 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                | singin |
+----+--------+---------------------+--------+
|  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)

ROLLUP МЕНЕН колдонуу

WITH ROLLUP бир эле статистиканы (SUM, AVG, COUNT...) топтоштурулган статистиканын негизинде ишке ашыра алат.

Мисалы, биз жогорудагы маалымат таблицасын аты боюнча топтойбуз, анан ар бир адам канча жолу киргенин санайбыз:

mysql> SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------+--------------+
| name   | singin_count |
+--------+--------------+
| 小丽 |            2 |
| 小明 |            7 |
| 小王 |            7 |
| NULL   |           16 |
+--------+--------------+
4 rows in set (0.00 sec)

NULL жазуусу ар бир адам үчүн кирүүлөрдүн санын билдирет.

Биз NUll, coalesce синтаксисин алмаштыра турган ат коюу үчүн coalesce колдоно алабыз:

select coalesce(a,b,c);

Параметрдин сыпаттамасы: эгерде a==null болсо, b тандаңыз; эгерде b== null болсо, c тандаңыз; эгерде a!=null болсо, а тандаңыз; эгерде abc нөл болсо, нөлдү (маанисиз) кайтарыңыз.

Төмөнкү мисалда аты бош болсо, анын ордуна жалпыны колдонобуз:

mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------------------------+--------------+
| coalesce(name, '总数') | singin_count |
+--------------------------+--------------+
| 小丽                   |            2 |
| 小明                   |            7 |
| 小王                   |            7 |
| 总数                   |           16 |
+--------------------------+--------------+
4 rows in set (0.01 sec)

Чен Вэйлиангдын блогунда ( https://www.chenweiliang.com/ ) бөлүшүлгөн "MySQL SUM GROUP BY Using? MySQL маалымат базасында GROUP BY COUNTтун кеңири түшүндүрмөсү" макаласы сизге пайдалуу болот деп үмүттөнөбүз.

Бул макаланын шилтемеси менен бөлүшүүдөн тартынбаңыз: https://www.chenweiliang.com/cwl-477.html

Көбүрөөк жашыруун трюктарды ачуу үчүн🔑, биздин Telegram каналыбызга кошулуңуз!

Бөлүшүп, жакса лайк! Сиздин бөлүшүүлөрүңүз жана лайктарыңыз биздин туруктуу мотивациябыз!

 

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

Жылдыруу үчүн Top