Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में एग्रीगेट फ़ंक्शंस (SUM, AVG, MAX, MIN, COUNT, DISTINCT) का उपयोग करना

रिपोर्टिंग, सांख्यिकीय और विश्लेषणात्मक उद्देश्य के लिए डेटा प्राप्त करने के लिए हमें अक्सर कई पंक्तियों पर गणना करने की आवश्यकता होती है। ऐसे मामलों में, MySQL में उपलब्ध एकत्रीकरण कार्य आसान होते हैं और हमें वांछित डेटा प्राप्त करने के लिए इन कार्यों का उपयोग करने के बारे में पता होना चाहिए। इन कार्यों में SUM, AVG, MAX, MIN, COUNT और DISTINCT शामिल हैं।

इस ट्यूटोरियल का शेष भाग इन एकत्रीकरण कार्यों के उपयोग की व्याख्या करता है।

टेस्ट डेटा

आप बाद के अनुभागों का पालन करने के लिए परीक्षण डेटा तैयार करने के लिए नीचे दिए गए प्रश्नों का उपयोग कर सकते हैं। एकत्रीकरण कार्यों को समझने के लिए स्कूल डेटाबेस और टेबल (उपयोगकर्ता और स्कोर) बनाएं।

# Create the database
CREATE SCHEMA `school` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

# Create the user table
CREATE TABLE `school`.`user` (
`user_id` BIGINT NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(45) NOT NULL,
`last_name` VARCHAR(45) NULL,
`section` SMALLINT(6) NULL,
`active` TINYINT(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`user_id`));

# Create the score table
CREATE TABLE `school`.`score` (
`score_id` BIGINT NOT NULL AUTO_INCREMENT,
`user_id` BIGINT NOT NULL,
`section` SMALLINT(6) NOT NULL DEFAULT 1,
`subject` VARCHAR(45) NOT NULL,
`score` SMALLINT(6) NOT NULL DEFAULT 0,
PRIMARY KEY (`score_id`));

अब उपयोगकर्ता तालिका में परीक्षण डेटा जोड़ें जैसा कि नीचे दिखाया गया है।

# User data
INSERT INTO `user` ( `user_id`, `first_name`, `last_name`, `section`, `active` ) VALUES
( 1, 'John', 'Smith', 1, 1 ),
( 2, 'Rick', 'Jones', 1, 1 ),
( 3, 'Catherine', 'Ponting', 2, 1 ),
( 4, 'Harsh', 'Upadhyay', 2, 1 ),
( 5, 'Tajwinder', 'Singh', 2, 0 );

उपरोक्त क्वेरी अनुभाग 1 और 2 के लिए 5 उपयोगकर्ताओं को सम्मिलित करती है। साथ ही, नीचे दिखाए गए अनुसार क्वेरी का उपयोग करके स्कोर डेटा सम्मिलित करें।

# Score data
INSERT INTO `school`.`score` (`score_id`, `user_id`, `section`, `subject`, `score`) VALUES
('1', '1', '1', 'Maths', '86'),
('2', '1', '1', 'Physics', '75'),
('3', '1', '1', 'Chemistry', '90'),
('4', '2', '1', 'Maths', '64'),
('5', '2', '1', 'Physics', '98'),
('6', '2', '1', 'Chemistry', '56'),
('7', '3', '1', 'Maths', '48'),
('8', '3', '1', 'Physics', '69'),
('9', '3', '1', 'Chemistry', '54'),
('10', '3', '2', 'Maths', '82'),
('11', '3', '2', 'Physics', '85'),
('12', '3', '2', 'Chemistry', '91'),
('13', '4', '2', 'Maths', '65'),
('14', '4', '2', 'Physics', '74'),
('15', '4', '2', 'Chemistry', '84');

हमने सक्रिय छात्रों का स्कोर डाला है। साथ ही, ध्यान दें कि सभी 3 विषयों के लिए सेक्शन 1 के लिए आईडी 1 और 2 वाले छात्र का स्कोर जोड़ा जाता है। उपरोक्त क्वेरी सेक्शन 1 और 2 के लिए आईडी 3 वाले छात्र के स्कोर डेटा को भी सम्मिलित करती है। आईडी 4 वाले छात्र को सेक्शन 2 के लिए स्कोर डेटा मिला है। अब हमारे पास समग्र कार्यों को सीखना शुरू करने के लिए अच्छा परीक्षण डेटा है।

SUM

यह खंड नीचे दिखाए गए अनुसार सभी वर्गों के लिए सभी विषयों के कुल अंक प्राप्त करने के लिए उपयोगकर्ताओं के अनुभाग-वार स्कोर प्राप्त करने के लिए कुल फ़ंक्शन योग के उपयोग की व्याख्या करता है।

# SUM - Total Score of the Users for each section
SELECT `user`.`first_name`, `user`.`last_name`, `score`.`section`, SUM(`score`) AS total_score FROM `user`, `score`
WHERE `user`.`user_id` = `score`.`user_id`
GROUP BY `score`.`user_id`, `score`.`section`;

# Result

first_name last_name section total_score
----------------------------------------------------
John Smith 1 251
Rick Jones 1 218
Catherine Ponting 1 171
Catherine Ponting 2 258
Harsh Upadhyay 2 223

उपरोक्त क्वेरी परिणामों का उपयोग रिपोर्ट प्रस्तुत करने के लिए किया जा सकता है, जिसमें प्रत्येक अनुभाग के लिए सभी उपयोगकर्ताओं के कुल स्कोर को दिखाया जा सकता है, जो उन्होंने स्कूल में पढ़ा है।

औसत

समग्र फ़ंक्शन AVG का उपयोग WHERE शर्तों और हमारे द्वारा लागू किए गए समूह के आधार पर एकत्रीकरण के लिए योग्य स्तंभों का औसत मान प्राप्त करने के लिए किया जा सकता है।

जैसा कि नीचे दिखाया गया है, हम प्रत्येक विषय में अनुभाग-वार औसत अंक प्राप्त कर सकते हैं।

# AVG - Section wise average score in each subject
SELECT `score`.`section`, `score`.`subject`, AVG(`score`) AS avg_score FROM `score`
GROUP BY `score`.`section`, `score`.`subject`;

# Result

section subject avg_score
--------------------------------------------
1 Maths 66.0000
1 Physics 80.6667
1 Chemistry 66.6667
2 Maths 73.5000
2 Physics 79.5000
2 Chemistry 87.5000

अब हम उपरोक्त डेटा का उपयोग प्रत्येक अनुभाग के लिए उपयोगकर्ताओं द्वारा प्राप्त औसत स्कोर को दर्शाने वाली रिपोर्ट तैयार करने के लिए कर सकते हैं।

अधिकतम

एग्रीगेट फ़ंक्शन MAX का उपयोग WHERE की शर्तों और हमारे द्वारा लागू किए गए ग्रुपिंग के आधार पर एग्रीगेशन के लिए योग्य कॉलम के अधिकतम मूल्य का पता लगाने के लिए किया जा सकता है।

जैसा कि नीचे दिखाया गया है, हम प्रत्येक विषय में अनुभाग-वार अधिकतम अंक प्राप्त कर सकते हैं।

# MAX - Section wise maximum score in each subject
SELECT `score`.`section`, `score`.`subject`, MAX(`score`) AS max_score FROM `score`
GROUP BY `score`.`section`, `score`.`subject`;

# Result

section subject max_score
--------------------------------------------
1 Maths 86
1 Physics 98
1 Chemistry 90
2 Maths 82
2 Physics 85
2 Chemistry 91

मिनट

एग्रीगेट फ़ंक्शन MIN का उपयोग WHERE की शर्तों और हमारे द्वारा लागू किए गए ग्रुपिंग के आधार पर एग्रीगेशन के लिए योग्य कॉलम के न्यूनतम मान का पता लगाने के लिए किया जा सकता है।

जैसा कि नीचे दिखाया गया है, हम प्रत्येक विषय में अनुभाग-वार न्यूनतम अंक प्राप्त कर सकते हैं।

# MIN - Section wise minimum score in each subject
SELECT `score`.`section`, `score`.`subject`, MIN(`score`) AS min_score FROM `score`
GROUP BY `score`.`section`, `score`.`subject`;

# Result

section subject max_score
--------------------------------------------
1 Maths 48
1 Physics 69
1 Chemistry 54
2 Maths 65
2 Physics 74
2 Chemistry 84

COUNT

निर्दिष्ट कॉलम में कुल मानों की संख्या प्राप्त करने के लिए कुल फ़ंक्शन COUNT का उपयोग किया जा सकता है।

परीक्षण डेटा का उपयोग करके, हम नीचे दिखाए गए अनुसार अनुभाग-वार कुल सक्रिय उपयोगकर्ता प्राप्त कर सकते हैं।

# COUNT - Total active users in each section
SELECT `user`.`section`, COUNT(`user_id`) AS active_users FROM `user`
WHERE `user`.`active` = 1
GROUP BY `user`.`section`;

# Result
section active_user
--------------------
1 2
2 2

DISTINCT

हम डुप्लिकेट रिकॉर्ड को छोड़ने के लिए कीवर्ड DISTINCT का उपयोग कर सकते हैं। हमारे परिदृश्य में, हम उपयोगकर्ता डेटा प्राप्त कर सकते हैं जिन्होंने score क्वेरी का उपयोग करके कम से कम एक विषय के लिए जैसा कि नीचे दिखाया गया है।

# DISTINCT - Get list of users who got score
SELECT DISTINCT `user`.`user_id`, `user`.`first_name`, `user`.`last_name` FROM `user`, `score`
WHERE `user`.`user_id` = `score`.`user_id`;

# Result

user_id first_name last_name
--------------------------------------------
1 John Smith
2 Rick Jones
3 Catherine Ponting
4 Harsh Upadhyay

हम देख सकते हैं कि निष्क्रिय उपयोगकर्ता जिसने एक बार भी स्कोर नहीं किया, उसे क्वेरी परिणामों से हटा दिया गया है।

इस प्रकार हम रिपोर्टिंग और विश्लेषण उद्देश्य के लिए डेटा प्राप्त करने के लिए समग्र कार्यों का उपयोग कर सकते हैं। समय के साथ संचित डेटा का उपयोग करके संगठन के निर्णय लेने के लिए प्रबंधकीय गतिविधियों के लिए ये कार्य भी महत्वपूर्ण हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL ग्रुप बाय एंड ऑर्डर बाय

  2. MySQL InnoDB तालिका से डेटा पंक्तियों को हटाने के बाद डिस्क स्थान जारी नहीं कर रहा है

  3. लाइक और वाइल्डकार्ड का उपयोग करके MySQL खोज का अनुकूलन

  4. मैं एक फ़ील्ड को दूसरे की तुलना में अधिक 'मूल्यवान' बनाने के लिए MySQL पूर्ण टेक्स्ट खोज प्रासंगिकता में कैसे हेरफेर कर सकता हूं?

  5. MySQL में D.O.B फ़ील्ड से आयु कैसे प्राप्त करें?