MySQL Kiel uzi sumgrupon per?MySQL-datumbazoDetala klarigo de grupo laŭ kalkulo en
MySQL GROUP BY deklaro
La deklaro GROUP BY grupigas rezultan aron bazitan sur unu aŭ pluraj kolumnoj.
Ni povas uzi funkciojn kiel COUNT, SUM, AVG, ktp sur grupigitaj kolumnoj.
GROUP BY sintakso
SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
Ekzempla pruvo
La ekzemploj en ĉi tiu ĉapitro uzas la jenajn tabelstrukturojn kaj datumojn.Antaŭ uzo, ni povas importi la sekvajn datumojn en la datumbazon.
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;
Post kiam la importo sukcesas, faru la sekvan SQL-deklaron:
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)
Poste, ni uzas la deklaron GROUP BY por grupigi la datuman tabelon laŭ nomo kaj kalkuli kiom da registroj ĉiu persono havas:
mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name; +--------+----------+ | name | COUNT(*) | +--------+----------+ | 小丽 | 1 | | 小明 | 3 | | 小王 | 2 | +--------+----------+ 3 rows in set (0.01 sec)
Uzu KUN ROLLUP
KUN ROLLUP povas fari la samajn statistikojn (SUM, AVG, COUNT...) surbaze de grupigitaj statistikaj datumoj.
Ekzemple, ni grupigas la supran datumtabelon laŭ nomo, kaj poste kalkulas la nombron da fojoj kiam ĉiu persono ensalutas:
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)
La rekordo NULL indikas la nombron da ensalutoj por ĉiuj.
Ni povas uzi kunflui por agordi nomon kiu povas anstataŭigi NUll. kunfluigi sintakson:
select coalesce(a,b,c);
Parametropriskribo: Se a==nula, elektu b; se b==nula, elektu c; se a!=nula, elektu a; se abc estas ambaŭ nulaj, redonu nulo (sensignifa).
En la sekva ekzemplo se la nomo estas malplena, ni uzas la totalon anstataŭe:
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 Blogo ( https://www.chenweiliang.com/ ) dividis "MySQL-sumgrupon laŭ uzo?" Detala klarigo pri grupo laŭ kalkulo en MySQL-datumbazo" estos helpema al vi.
Bonvenon dividi la ligon de ĉi tiu artikolo:https://www.chenweiliang.com/cwl-477.html
Por malŝlosi pliajn kaŝitajn trukojn🔑, bonvenon aliĝi al nia Telegram-kanalo!
Kunhavigu kaj ŝatu se ĝi ŝatas! Viaj akcioj kaj ŝatoj estas nia daŭra instigo!