Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Nhóm theo nhiều cột trên một thủ tục lưu trữ MySql duy nhất

Có, có thể sử dụng SQL động . Chúng ta có thể tạo một chuỗi truy vấn, sau đó chuẩn bị và thực thi nó. Điều này sẽ cho phép chúng tôi chỉ định tên cột động, không thể trực tiếp được.

Bạn cũng sẽ cần sử dụng thêm một tham số để chỉ định cột nào sẽ sử dụng trong Group By

DELIMITER $$

CREATE DEFINER=`root`@`localhost` 
  PROCEDURE `GetChartApprovedData`(in siteValue varchar(45),
                                   in skillValue varchar(100), 
                                   in shiftValue varchar(100), 
                                   in tmValue varchar(45), 
                                   in grpmValue varchar(45), 
                                   in dateValue date, 
                                   in dateValue1 date, 
                                   in groupByColumn varchar(64)) 
-- add extra in parameter, groupByColumn, to specify which column to group upon 

BEGIN

SET query_str = CONCAT('SELECT 
                          count(agentlogin) AS totalApproved, 
                          shift AS Shift, 
                          skill AS Skill, 
                          tm AS TM, 
                          grpM AS GrpM
                        FROM approved
                        WHERE (sitevalue IS NULL
                               OR site = sitevalue)
                          AND (skillvalue IS NULL
                               OR skill = skillvalue)
                          AND (shiftvalue IS NULL
                               OR shift = shiftvalue)
                          AND (tmValue IS NULL
                               OR tm = tmValue)
                          AND (grpmValue IS NULL
                               OR grpM = grpmValue)
                          AND (dateValue IS NULL
                               OR date BETWEEN dateValue AND dateValue1)
                        GROUP BY ', 
                        groupByColumn); -- concatenate the group by column param

-- prepare the query
PREPARE stmt FROM query_str;

-- execute the query
EXECUTE stmt;

-- Clear up
DEALLOCATE PREPARE stmt;

END $$

DELIMITER ;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tập lệnh Php để tính Tổng số tích lũy cho các tài khoản

  2. mysql:tại sao so sánh 'chuỗi' với 0 lại cho kết quả đúng?

  3. MySQL SELECT id của hàng trong đó TUYỆT VỜI NHẤT trong số MAX mục nhập của một số cột

  4. findAll () từ Sequelize không nhận được

  5. Sự khác biệt giữa tinyint, smallint, mediumint, bigint và int trong MySQL là gì?