存储过程和 select 查询 return 不同的结果 MySQL
Stored procedure and select query return different result in MySQL
我正在使用 MySQL 和 MySQL workbench。
这是我的存储过程:
CREATE DEFINER=`root`@`%` PROCEDURE `sms_stats`(
IN fromDate VARCHAR(8),
IN toDate VARCHAR(8),
IN smsCost VARCHAR(8),
OUT bank_id int,
OUT bank_name VARCHAR(100),
OUT totalSms VARCHAR(20),
OUT totalCost VARCHAR(20)
)
BEGIN
SELECT c.bank_id as bank_id,
b.name as bank_name,
count(c.bank_id) as totalSms,
(count(c.bank_id) * smsCost) as totalCost
FROM calendar c
LEFT JOIN banks b on c.bank_id = b.id
WHERE sms_sent = 1
AND sms_sent_datetime >= fromDate
AND sms_sent_datetime <= toDate
GROUP BY bank_id, bank_name;
END
为什么存储过程return(我执行的是:call prenotabanca.sms_stats('20220101', '20220420', '0.08', @bank_id, @bank_name , @totalSms, @totalCost);) 与
不同的结果
SELECT c.bank_id as bank_id,
b.name as bank_name,
count(c.bank_id) as totalSms,
(count(c.bank_id) * '0.08') as totalCost
FROM prenotabanca.calendar c
LEFT JOIN prenotabanca.banks b on c.bank_id = b.id
WHERE sms_sent = 1
AND sms_sent_datetime >= '20220101'
AND sms_sent_datetime <= '20220420'
GROUP BY bank_id, bank_name;
我解决了,问题出在group by,我没有使用别名,column bank id包含在几个表中。
我正在使用 MySQL 和 MySQL workbench。
这是我的存储过程:
CREATE DEFINER=`root`@`%` PROCEDURE `sms_stats`(
IN fromDate VARCHAR(8),
IN toDate VARCHAR(8),
IN smsCost VARCHAR(8),
OUT bank_id int,
OUT bank_name VARCHAR(100),
OUT totalSms VARCHAR(20),
OUT totalCost VARCHAR(20)
)
BEGIN
SELECT c.bank_id as bank_id,
b.name as bank_name,
count(c.bank_id) as totalSms,
(count(c.bank_id) * smsCost) as totalCost
FROM calendar c
LEFT JOIN banks b on c.bank_id = b.id
WHERE sms_sent = 1
AND sms_sent_datetime >= fromDate
AND sms_sent_datetime <= toDate
GROUP BY bank_id, bank_name;
END
为什么存储过程return(我执行的是:call prenotabanca.sms_stats('20220101', '20220420', '0.08', @bank_id, @bank_name , @totalSms, @totalCost);) 与
不同的结果SELECT c.bank_id as bank_id,
b.name as bank_name,
count(c.bank_id) as totalSms,
(count(c.bank_id) * '0.08') as totalCost
FROM prenotabanca.calendar c
LEFT JOIN prenotabanca.banks b on c.bank_id = b.id
WHERE sms_sent = 1
AND sms_sent_datetime >= '20220101'
AND sms_sent_datetime <= '20220420'
GROUP BY bank_id, bank_name;
我解决了,问题出在group by,我没有使用别名,column bank id包含在几个表中。