(也发布了 here 。)
所以我有两个表,一个是invalid
表,另一个是valid
表。
有效
表:
id
status
date
无效
表:
id
status
date
我必须使用此输出生成报告:
date on-time late total valid invalid1 invalid2 total rate
--------- ------- ---- ----- ----- -------- -------- ----- ----
9/10/2011 4 10 14 3 3 3 6
date
:2张表的公共(public)字段,分组依据的字段,当天有多少条记录on-time
:有效表上所有id的计数late
: 无效表中所有记录(id)的计数total
:准时和迟到的总和valid
:有效表中状态为“valid”的id的个数invalid1
:无效表中状态为“invalid1”的 id 计数invalid2
:无效表中状态为“invalid2”的 id 计数total
:有效、无效1、无效2的总数rate
:总数的平均值
它基本上是对不同表的多个查询。我怎样才能实现它?
最佳答案
是这样的吗?
SELECT
*,
(result.total + result._total) / 2 AS rate
FROM (
SELECT
date,
SUM(CASE WHEN data.valid = 1 THEN 1 ELSE 0 END) AS ontime,
SUM(CASE WHEN data.valid = 0 THEN 1 ELSE 0 END) AS late,
COUNT(*) AS total,
SUM(CASE WHEN data.valid = 1 AND data.status = 'valid' THEN 1 ELSE 0 END) AS valid,
SUM(CASE WHEN data.valid = 0 AND data.status = 'invalid1' THEN 1 ELSE 0 END) AS invalid1,
SUM(CASE WHEN data.valid = 0 AND data.status = 'invalid2' THEN 1 ELSE 0 END) AS invalid2,
SUM(CASE WHEN data.status IN ('valid', 'invalid', 'invalid2') THEN 1 ELSE 0 END) AS _total
FROM (
SELECT
date,
status,
valid = 1
FROM
Valid
UNION ALL
SELECT
date,
status,
valid = 0
FROM
InValid ) AS data
GROUP BY
date) AS result
关于sql - 不同表中的多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7631396/