Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果在UNION ALL查询中未找到行,则返回默认值 脚本_Mysql_Join - Fatal编程技术网

Mysql 如果在UNION ALL查询中未找到行,则返回默认值 脚本

Mysql 如果在UNION ALL查询中未找到行,则返回默认值 脚本,mysql,join,Mysql,Join,我在此基础上开发了一个查询,优化的一部分是创建一个MySql视图,用于为用户和销售生成统计数据,问题是当SELECT行中的一行没有结果时,它会从结果表中被忽略 问题: 如果没有找到任何SELECT的行,如何告诉MySql设置默认值(例如0) 代码 这是创建视图的代码 CREATE OR REPLACE VIEW user_events AS SELECT 'Complete profiles' AS type, created_at FROM users

我在此基础上开发了一个查询,优化的一部分是创建一个MySql视图,用于为用户和销售生成统计数据,问题是当
SELECT
行中的一行没有结果时,它会从结果表中被忽略

问题: 如果没有找到任何
SELECT
的行,如何告诉MySql设置默认值(例如0)

代码 这是创建视图的代码

CREATE OR REPLACE VIEW user_events AS
    SELECT 'Complete profiles' AS type, created_at
        FROM users
        WHERE completed_registration = 1

    UNION ALL SELECT 'Incomplete profiles', created_at
        FROM users
        WHERE completed_registration = 0 AND verified_email = 1

    UNION ALL SELECT 'Unverified profiles', created_at
        FROM users
        WHERE verified_email = 0

    UNION ALL SELECT 'Onsite Teachers', created_at
        FROM onsite_teachers

    UNION ALL SELECT 'Onsite Teachers hired', created_at
        FROM purchases
            INNER JOIN purchased_profiles
                ON purchased_profiles.purchase_id = purchases.id
                 AND purchased_profiles.profile_type = 'onsite_teacher'
        WHERE purchases.transaction_status = 'completed'

    UNION ALL SELECT 'Translators', created_at
        FROM translators

    UNION ALL SELECT 'Translators hired', created_at
        FROM purchases
            INNER JOIN purchased_profiles
                ON purchased_profiles.purchase_id = purchases.id
                AND purchased_profiles.profile_type = 'translator'
        WHERE purchases.transaction_status = 'completed'

    UNION ALL SELECT 'Interpreters', created_at
        FROM interpreters

    UNION ALL SELECT 'Interpreters hired', created_at
        FROM purchases
            INNER JOIN purchased_profiles
                ON purchased_profiles.purchase_id = purchases.id
                AND purchased_profiles.profile_type = 'interpreter'
        WHERE purchases.transaction_status = 'completed';
这是查询过去6个月(包括本月)总计的代码

SELECT 
    type, 
    COUNT(CASE 
        WHEN created_at >= CAST(CURDATE() - INTERVAL (DAYOFMONTH(CURDATE()) - 1) DAY AS DATETIME) 
        THEN 1 
    END) AS 0_month_ago, 

    COUNT(CASE 
        WHEN created_at BETWEEN CAST(CURDATE() - INTERVAL (DAYOFMONTH(CURDATE()) - 1) DAY - INTERVAL 1 MONTH AS DATETIME)
            AND CAST(LAST_DAY(CURDATE() - INTERVAL 1 MONTH) + INTERVAL 1 DAY AS DATETIME)
        THEN 1 
    END) AS 1_month_ago,

    COUNT(CASE 
        WHEN created_at BETWEEN CAST(CURDATE() - INTERVAL (DAYOFMONTH(CURDATE()) - 1) DAY - INTERVAL 2 MONTH AS DATETIME)
            AND CAST(LAST_DAY(CURDATE() - INTERVAL 2 MONTH) + INTERVAL 1 DAY AS DATETIME)
        THEN 1 
    END) AS 2_months_ago,

    COUNT(CASE 
        WHEN created_at BETWEEN CAST(CURDATE() - INTERVAL (DAYOFMONTH(CURDATE()) - 1) DAY - INTERVAL 3 MONTH AS DATETIME)
            AND CAST(LAST_DAY(CURDATE() - INTERVAL 3 MONTH) + INTERVAL 1 DAY AS DATETIME)
        THEN 1 
    END) AS 3_months_ago,

    COUNT(CASE 
        WHEN created_at BETWEEN CAST(CURDATE() - INTERVAL (DAYOFMONTH(CURDATE()) - 1) DAY - INTERVAL 4 MONTH AS DATETIME)
            AND CAST(LAST_DAY(CURDATE() - INTERVAL 4 MONTH) + INTERVAL 1 DAY AS DATETIME)
        THEN 1 
    END) AS 4_months_ago,

    COUNT(CASE 
        WHEN created_at BETWEEN CAST(CURDATE() - INTERVAL (DAYOFMONTH(CURDATE()) - 1) DAY - INTERVAL 5 MONTH AS DATETIME)
            AND CAST(LAST_DAY(CURDATE() - INTERVAL 5 MONTH) + INTERVAL 1 DAY AS DATETIME)
        THEN 1 
    END) AS 5_months_ago
FROM 
    user_events
GROUP BY 
    type;
电流输出 如果仔细查看,没有雇用的
译员
译员
行,我希望设置这些行,如果它们返回
null

+=========================+===============+===============+===============+==============+===============+===============+
|键入| 0个月前| 1个月前| 2个月前| 3个月前| 4个月前| 5个月前||
+=========================+===============+===============+===============+==============+===============+===============+
|完整剖面图| 7 | 20 | 14 | 25 | 30 | 7|
+-------------------------+---------------+---------------+---------------+--------------+---------------+---------------+
|不完整外形| 12 | 27 | 56 | 45 | 48 | 23|
+-------------------------+---------------+---------------+---------------+--------------+---------------+---------------+
|未经验证的剖面图| 3 | 16 | 23 | 5 | 0 | 9|
+-------------------------+---------------+---------------+---------------+--------------+---------------+---------------+
|现场教师| 11 | 36 | 8 | 15 | 46 | 12|
+-------------------------+---------------+---------------+---------------+--------------+---------------+---------------+
|聘请现场教师| 0 | 0 | 12 | 9 | 3 | 0|
+-------------------------+---------------+---------------+---------------+--------------+---------------+---------------+
|口译员| 4 | 21 | 27 | 46 | 45 | 28|
+-------------------------+---------------+---------------+---------------+--------------+---------------+---------------+
|翻译人员| 7 | 20 | 19 | 27 | 19 | 42|
+-------------------------+---------------+---------------+---------------+--------------+---------------+---------------+

用户事件视图是一种日志,类似于

type                  | created_at
======================+==============
Interpreters hired    | 2014-12-12
Interpreters hired    | 2014-12-14
Interpreters hired    | 2014-12-16
Interpreters hired    | 2015-01-02
但是,如果从未雇用过任何解释器,则不会有
类型=“已雇用的解释器”
的行。在这种情况下,计数查询不可能凭空编造一行雇用的
口译员

解决方案是确保无论发生什么情况,
user\u events
视图中都会出现
解释器雇用
行。您可以在
日期不创建任何
的情况下创建此类虚构行。这样,总是会有一些东西要按
分组,但不一定有任何东西要
COUNT()

CREATE OR REPLACE VIEW user_events AS
    SELECT 'Complete profiles' AS type, created_at
        FROM users
        WHERE completed_registration = 1

    UNION ALL SELECT 'Incomplete profiles', created_at
        FROM users
        WHERE completed_registration = 0 AND verified_email = 1

    UNION ALL SELECT 'Unverified profiles', created_at
        FROM users
        WHERE verified_email = 0

    UNION ALL SELECT 'Onsite Teachers', created_at
        FROM onsite_teachers

    UNION ALL SELECT 'Onsite Teachers hired', created_at
        FROM purchases
            INNER JOIN purchased_profiles
                ON purchased_profiles.purchase_id = purchases.id
                 AND purchased_profiles.profile_type = 'onsite_teacher'
        WHERE purchases.transaction_status = 'completed'
    UNION ALL SELECT 'Onsite Teachers hired', NULL

    UNION ALL SELECT 'Translators', created_at
        FROM translators

    UNION ALL SELECT 'Translators hired', created_at
        FROM purchases
            INNER JOIN purchased_profiles
                ON purchased_profiles.purchase_id = purchases.id
                AND purchased_profiles.profile_type = 'translator'
        WHERE purchases.transaction_status = 'completed'
    UNION ALL SELECT 'Translators hired', NULL

    UNION ALL SELECT 'Interpreters', created_at
        FROM interpreters

    UNION ALL SELECT 'Interpreters hired', created_at
        FROM purchases
            INNER JOIN purchased_profiles
                ON purchased_profiles.purchase_id = purchases.id
                AND purchased_profiles.profile_type = 'interpreter'
        WHERE purchases.transaction_status = 'completed'
    UNION ALL SELECT 'Interpreters hired', NULL;