Artikelgids
MySQL Som groepeer volgens gebruik?MySQL databasisGedetailleerde verduideliking van groep volgens telling
MySQL GROUP BY stelling
Die GROUP BY-stelling groepeer die resultaatstel gebaseer op een of meer kolomme.
Op die gegroepeerde kolom kan ons COUNT, SOM, AVG, ens. funksies gebruik.
GROEP DEUR sintaksis
SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
Voorbeeld demonstrasie
Die voorbeeld in hierdie hoofstuk gebruik die volgende tabelstruktuur en data.Voordat ons dit gebruik, kan ons die volgende data in die databasis invoer.
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;
Nadat die invoer suksesvol is, voer die volgende SQL-stelling uit:
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)
Vervolgens gebruik ons die GROUP BY-stelling om die datatabel volgens naam te groepeer en tel hoeveel rekords elke persoon het:
mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name; +--------+----------+ | name | COUNT(*) | +--------+----------+ | 小丽 | 1 | | 小明 | 3 | | 小王 | 2 | +--------+----------+ 3 rows in set (0.01 sec)
Gebruik MET ROLLUP
MET ROLLUP kan dieselfde statistieke (SOM, AVG, COUNT...) implementeer op die basis van gegroepeerde statistieke.
Ons groepeer byvoorbeeld die bogenoemde datatabel volgens naam, en tel dan die aantal kere wat elke persoon aangemeld het:
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)
Die rekord NULL verteenwoordig die aantal aanmeldings vir almal.
Ons kan coalesce gebruik om 'n naam te stel wat NUll kan vervang, coalesce sintaksis:
select coalesce(a,b,c);
Parameterbeskrywing: as a==nul, kies b; as b==nul, kies c; as a!=nul, kies a; as abc nul is, gee nul (betekenisloos) terug.
In die volgende voorbeeld as die naam leeg is, gebruik ons eerder die totaal:
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)
Hoop Chen Weiliang Blog ( https://www.chenweiliang.com/ ) gedeel "MySQL-somgroep volgens gebruik? Gedetailleerde verduideliking van groep volgens tel in MySQL-databasis" is nuttig vir jou.
Welkom om die skakel van hierdie artikel te deel:https://www.chenweiliang.com/cwl-477.html
Welkom by die Telegram-kanaal van Chen Weiliang se blog om die nuutste opdaterings te kry!
📚 Hierdie gids bevat groot waarde, 🌟Dit is 'n seldsame geleentheid, moet dit nie misloop nie! ⏰⌛💨
Share en like as jy wil!
Jou deel en laaiks is ons voortdurende motivering!