Article Directory
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
