【发布时间】:2016-05-02 04:01:30
【问题描述】:
我有两个表 Log 和 Player。其中 Log 存储带有 playerId 和日期的每个游戏日志。并且 Player 表的 Players 信息为 Age 和 Gender ..etc。我正在编写一个 SQL 存储过程,它需要两个日期,并将按两个日期之间的年龄范围和性别计算 LogId 和组。但是当我运行 SQL 过程时,当该期间没有玩家存在时,它不会显示所有 Age_Range/Gender 条目。我正在尝试获取所有 Age_Range/Gender 条目及其实际计数或计数 = 0,如果他们不不存在。 我什至尝试过改变
count(L.LogId) as Count,
到
count(IFNULL(L.LogId, 0)) as Count,
我的SQL程序是:
CREATE PROCEDURE `SHOW_AGE_RANGE` (IN date1 CHAR(10), IN date2 CHAR(10))
BEGIN
SELECT
count(L.LogId) as Count,
CASE
WHEN P.age BETWEEN 13 AND 18 THEN '13-18'
WHEN P.age BETWEEN 19 AND 25 THEN '19-25'
WHEN P.age BETWEEN 26 AND 39 THEN '26-39'
WHEN P.age BETWEEN 40 AND 59 THEN '40-59'
WHEN P.age > 59 THEN '60+'
END as Age_Range,
CASE
WHEN P.gender = 0 then 'Female'
WHEN P.gender = 1 then 'Male'
END as Gender
FROM Log L
LEFT JOIN Player P ON L.playerId = P.playerId
WHERE CAST(L.createdDate AS DATE) BETWEEN CAST(date1 AS DATE) AND CAST(date2 AS DATE)
GROUP BY Age_Range, Gender;
END
SQL 过程的输出:
Count Age_Range Gender
----------------------------------
'1' '13-18' 'Male'
'1' '19-25' 'Female'
'3' '26-39' 'Female'
'2' '40-59' 'Male'
'1' '60+' 'Female'
预期输出
Count Age_Range Gender
----------------------------------
'0' '13-18' 'Female'
'1' '13-18' 'Male'
'1' '19-25' 'Female'
'0' '19-25' 'Male'
'3' '26-39' 'Female'
'0' '26-39' 'Male'
'0' '40-59' 'Female'
'2' '40-59' 'Male'
'1' '60+' 'Female'
'0' '60+' 'Male'
【问题讨论】:
标签: mysql sql stored-procedures