Article Directory
MySQL Колдонуу боюнча топтолгон топ?MySQL маалымат базасыЭсеп боюнча топтун деталдуу түшүндүрмөсү
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)
Hope Chen Weiliang блогу ( https://www.chenweiliang.com/ ) бөлүштү "MySQL суммасынын тобу колдонулушу боюнча? MySQL маалымат базасында топ боюнча деталдуу түшүндүрмө" сизге пайдалуу.
Бул макаланын шилтемесин бөлүшүүгө кош келиңиз:https://www.chenweiliang.com/cwl-477.html
Акыркы жаңылыктарды алуу үчүн Чен Вейляндын блогунун Telegram каналына кош келиңиз!
📚 Бул колдонмо чоң баалуулуктарды камтыйт, 🌟Бул сейрек кездешүүчү мүмкүнчүлүк, аны өткөрүп жибербеңиз! ⏰⌛💨
Бөлүшүп, жакса лайк!
Сиздин бөлүшүүңүз жана лайктарыңыз биздин үзгүлтүксүз мотивациябыз!