pelrêça gotarê
MySQL Koma berhevokê li gorî karanîna?Databasa MySQLRavekirina berfireh a komê ji hêla hejmartinê ve
Daxuyaniya MySQL GROUP BY
Daxuyaniya GROUP BY encamên ku li ser bingeha yek an çend stûnan têne kom kirin.
Li ser stûna komkirî em dikarin fonksiyonên COUNT, SUM, AVG, hwd. bikar bînin.
GROUP BY syntaks
SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
Nimûne xwenîşandan
Mînaka di vê beşê de struktur û daneya tabloya jêrîn bi kar tîne, berî ku em bikar bînin, em dikarin daneyên jêrîn bixin nav databasê.
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;
Piştî ku import serketî bû, daxuyaniya SQL ya jêrîn bicîh bikin:
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)
Dûv re em danezana GROUP BY bikar tînin da ku tabloya daneyê li gorî navan kom bikin û bijmêrin ku her kesek çend tomar hene:
mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name; +--------+----------+ | name | COUNT(*) | +--------+----------+ | 小丽 | 1 | | 小明 | 3 | | 小王 | 2 | +--------+----------+ 3 rows in set (0.01 sec)
BI GELEKÊ BIKETINE
BI ROLLUP dikare heman statîstîkan (SUM, AVG, HEJMAR...) li ser bingeha statîstîkên komkirî bicîh bîne.
Mînakî, em tabloya daneya jorîn bi navên xwe kom dikin, û dûv re çend caran ku her kes têkeve dihejmêrin:
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)
Tomara NULL ji bo her kesî hejmara têketinê nîşan dide.
Em dikarin hevgirtinê bikar bînin da ku navek saz bikin ku dikare şûna NUll, hevoksaziya hevgirtinê bigire:
select coalesce(a,b,c);
Danasîna parametreyê: heke a==null, b hilbijêrin; heke b==null, c hilbijêrin; heke a!=null, a hilbijêrin; heke abc betal be, null vegerîne (bê wate).
Di mînaka jêrîn de heke nav vala ye em li şûna wê tevahiyê bikar tînin:
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 Blog ( https://www.chenweiliang.com/ ) parve kir "MySQL sum group by use? Ravekirina Berfireh a Komê ji hêla Hejmarê ve di Databasa MySQL de" ji we re arîkar e.
Bi xêr hatî bo parvekirina girêdana vê gotarê:https://www.chenweiliang.com/cwl-477.html
Hûn bi xêr hatin kanala Telegramê ya bloga Chen Weiliang da ku nûvekirinên herî dawî bistînin!
📚 Ev rêber nirxek pir mezin dihewîne, 🌟Ev derfetek kêm e, wê ji dest nede! ⏰⌛💨
Heke hûn hez dikin parve bikin û hez bikin!
Parvekirin û ecibandinên we motîvasyona meya domdar e!