所以这是我很长的 SQL 查询。
基本上,我有 2 个学校级别,JC1 和 JC2,我正在计算当前日期和前一个日期的每个级别的字段,如下所示。
这是我今天的原始子查询,我使用另一个日期不同的子查询。
SELECT
level,
COUNT(studentid) AS total,
SUM(leader1 <> '' OR leader2 <> '') AS leaders,
SUM(scholarship <> '') AS scholarship,
SUM(pegasus <> '') as pegasus
FROM `laterec-students`
WHERE latetime > '2012-05-25 00:00:00'
GROUP BY level;
它会回来
level | total | leaders | scholarship |pegasus
JC1 | 28 | 7 | 0 | 2
JC2 | 14 | 6 | 0 | 3
现在对于某些日期,我可能不会同时返回 JC1 和 JC2。(如2012-05-25上面我得到了JC1和JC2,前一天我只得到了JC2,因为没有JC1数据)
所以这就是为什么我没有使用 JOIN 来帮助我,或者可能是因为我真的不知道如何正确使用 JOIN。
对于下面我的 SQL 查询,
子查询返回这个(子查询 tjc1 的示例)
total | leaders | scholarship |pegasus
28 | 7 | 0 | 2
SELECT
SUM(tjc1.total) AS JC1total,
SUM(yjc1.ytotal) AS JC1ytotal,
SUM(tjc1.leaders) AS JC1leaders,
SUM(yjc1.yleaders) AS JC1yleaders,
SUM(tjc1.scholarship) AS JC1scholarship,
SUM(yjc1.yscholarship) AS JC1yscholarship,
SUM(tjc1.pegasus) AS JC1pegasus,
SUM(yjc1.ypegasus) AS JC1ypegasus,
SUM(tjc2.total) AS JC2total,
SUM(yjc2.ytotal) AS JC2ytotal,
SUM(tjc2.leaders) AS JC2leaders,
SUM(yjc2.yleaders) AS JC2yleaders,
SUM(tjc2.scholarship) AS JC2scholarship,
SUM(yjc2.yscholarship) AS JC2yscholarship,
SUM(tjc2.pegasus) AS JC2pegasus,
SUM(yjc2.ypegasus) AS JC2ypegasus
FROM
(
SELECT
COUNT(studentid) AS total,
SUM(leader1 <> '' OR leader2 <> '') AS leaders,
SUM(scholarship <> '') AS scholarship,
SUM(pegasus <> '') as pegasus
FROM `laterec-students`
WHERE latetime > '2012-05-25 00:00:00'
AND level = 'JC1'
) tjc1,
(
SELECT
COUNT(studentid) AS ytotal,
SUM(leader1<>'' or leader2<>'') AS yleaders,
SUM(scholarship<>'') AS yscholarship,
SUM(pegasus<>'') as ypegasus
FROM `laterec-students`
WHERE latetime BETWEEN '2012-05-24 00:00:00' AND '2012-05-24 23:59:59'
AND level = 'JC1'
) yjc1,
(
SELECT
COUNT(studentid) AS total,
SUM(leader1 <> '' OR leader2 <> '') AS leaders,
SUM(scholarship <> '') AS scholarship,
SUM(pegasus <> '') as pegasus
FROM `laterec-students`
WHERE latetime > '2012-05-25 00:00:00'
AND level = 'JC2'
) tjc2,
(
SELECT
COUNT(studentid) AS ytotal,
SUM(leader1<>'' or leader2<>'') AS yleaders,
SUM(scholarship<>'') AS yscholarship,
SUM(pegasus<>'') as ypegasus
FROM `laterec-students`
WHERE latetime BETWEEN '2012-05-24 00:00:00' AND '2012-05-24 23:59:59'
AND level = 'JC2'
) yjc2
因此,如果您认为您可以找到一种方法来帮助我缩短查询、提高查询效率等。我将永远感激不尽,并且能够在此过程中学到一些东西。谢谢!