sql - 不同表中的多个查询

标签 sql

(也发布了 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/

相关文章:

sql - 至少一个子级具有其所有子级的所有行都通过条件

SQL DML 练习 10

sql - 如何将 LONG 数据转换为 TIMESTAMP 或 VARCHAR2?

sql - 使用函数将 T-SQL 日期时间四舍五入到最接近的分钟和最接近的小时

sql - 将 dd-mm-yyyy 转换为 mm/dd/yyyy

asp.net - SQL LIKE % 对于整数

SQL选择单词的第一个字母?

mysql - 更新集 - 查询表达式中的语法错误(缺少运算符)

mysql - 根据其他 2 列的总和查找每个键的前 N ​​个项目

sql - 避免多对多表中的可空外键