Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL फ़ंक्शन बनाकर कॉलम में मानों का औसत कैसे निकालें?

MySQL में स्टोर्ड फ़ंक्शन बनाकर विशिष्ट नाम के अंकों का औसत निकालना

MySQL में CREATE FUNCTION का उपयोग करके पुन: प्रयोज्य स्टोर्ड फ़ंक्शन बना सकते हैं जो पैरामीटर लेता है, गणना करता है, और मान लौटाता है।

उदाहरण के साथ पूर्ण कार्यान्वयन

टेबल बनाना

mysql> CREATE TABLE DemoTable638 (Name VARCHAR(100), Marks INT);

रिकॉर्ड डालना

mysql> INSERT INTO DemoTable638 VALUES('John', 67), ('John', 90), ('David', 99), ('John', 60);

सभी रिकॉर्ड देखना

mysql> SELECT * FROM DemoTable638;

आउटपुट:

+-------+-------+
| Name  | Marks |
+-------+-------+
| John  | 67    |
| John  | 90    |
| David | 99    |
| John  | 60    |
+-------+-------+
4 rows in set (0.00 sec)

स्टोर्ड फ़ंक्शन बनाना

mysql> SET GLOBAL log_bin_trust_function_creators = 1;
mysql> DELIMITER //
mysql> CREATE FUNCTION getAverageDemo() RETURNS INT
BEGIN
    DECLARE value INT;
    SELECT AVG(Marks) INTO value FROM DemoTable638 WHERE Name = 'John';
    RETURN value;
END //
mysql> DELIMITER ;

महत्वपूर्ण: log_bin_trust_function_creators = 1 बाइनरी लॉगिंग सक्षम होने पर फ़ंक्शन निर्माण की अनुमति देता है।

फ़ंक्शन कॉल करना

mysql> SELECT getAverageDemo();

आउटपुट:

+------------------+
| getAverageDemo() |
+------------------+
| 72               |
+------------------+
1 row in set (0.01 sec)

गणना: John के अंक: 67, 90, 60 → औसत = (67+90+60)/3 = 217/3 = 72.33 → INT में 72

फ़ंक्शन संरचना व्याख्या

CREATE FUNCTION function_name(parameters) RETURNS return_type
[characteristics]  -- DETERMINISTIC, NO SQL, READS SQL DATA, etc.
BEGIN
    -- घोषणाएं
    DECLARE var_name type [DEFAULT value];
    
    -- लॉजिक
    SELECT ... INTO var_name ...;
    
    RETURN var_name;
END

पैरामीटराइज़्ड फ़ंक्शन (अधिक लचीला)

CREATE FUNCTION getAverageByName(studentName VARCHAR(100)) RETURNS DECIMAL(10,2)
DETERMINISTIC
READS SQL DATA
BEGIN
    DECLARE avg_marks DECIMAL(10,2);
    SELECT AVG(Marks) INTO avg_marks FROM DemoTable638 WHERE Name = studentName;
    RETURN COALESCE(avg_marks, 0);  -- NULL सुरक्षा
END

उपयोग:

SELECT getAverageByName('John');   -- 72.33
SELECT getAverageByName('David');  -- 99.00
SELECT getAverageByName('Unknown'); -- 0.00

फ़ंक्शन देखना/हटाना

SHOW FUNCTION STATUS WHERE Name = 'getAverageDemo';
DROP FUNCTION IF EXISTS getAverageDemo;

फ़ंक्शन vs प्रोसीजर

पहलूFUNCTIONPROCEDURE
लौटाता हैएक मान (अनिवार्य)कोई मान नहीं (OUT पैरामीटर से)
कहां उपयोगSELECT, WHERE, expressions मेंCALL स्टेटमेंट से
ट्रांजैक्शननहीं कर सकताकर सकता है (COMMIT/ROLLBACK)
तालिका संशोधननहीं (READS SQL DATA)कर सकता है

साधारण क्वेरी विकल्प (फ़ंक्शन के बिना)

SELECT AVG(Marks) FROM DemoTable638 WHERE Name = 'John';

सरल मामलों के लिए सीधा क्वेरी बेहतर है। फ़ंक्शन जटिल पुन: प्रयोज्य तर्क के लिए उपयोगी।

  1. - MySQL में कॉलम अपडेट करें और ट्रेलिंग अंडरस्कोर मान हटाएं

    MySQL में किसी कॉलम से ट्रेलिंग अंडरस्कोर (_) मानों को हटाने के लिए TRIM() फंक्शन का उपयोग UPDATE स्टेटमेंट के साथ किया जाता है। सिंटैक्स: UPDATE yourTableName SET yourColumnName = TRIM(TRAILING _ FROM yourColumnName); आइए एक उदाहरण से समझते हैं। पहले एक टेबल बनाते हैं: mysql> create table De

  1. - MySQL में GROUP BY HAVING से डुप्लिकेट कॉलम मान खोजें और प्रदर्शित करें

    किसी कॉलम में डुप्लिकेट मान (एक से अधिक बार आने वाले) खोजने के लिए GROUP BY और 1 का उपयोग करें। टेबल बनाएं mysql> CREATE TABLE DemoTable1858 (ModelNumber VARCHAR(50)); डेटा डालें mysql> INSERT INTO DemoTable1858 VALUES(Audi A4), (Audi A6), (Audi A4), (Audi Q5), (Audi R8), (Audi Q5); डुप्लि

  1. - MySQL में किसी कॉलम में अधिकतम मान खोजना

    किसी कॉलम में अधिकतम मान खोजने के लिए MAX(columnName) का उपयोग करना होगा। लेकिन, पहले, हम MySQL में डेटाबेस और टेबल के बारे में समझेंगे। MySQL इंस्टॉल करने से पहले, यह निर्धारित करना महत्वपूर्ण है कि किस संस्करण और किस डिस्ट्रीब्यूशन फॉर्मेट (यह बाइनरी फाइल या सोर्स फाइलों से हो सकता है) का उपयोग