【问题标题】:Two SQL counts without nested select没有嵌套选择的两个 SQL 计数
【发布时间】:2015-01-27 09:00:43
【问题描述】:

我有一个 SQL 查询需要更改为不是嵌套选择。

我不知道该怎么做....

SELECT 
    (SELECT COUNT(DISTINCT _user_id) FROM [data] WHERE (_language == 'en')) / 
    COUNT(DISTINCT _user_id)
FROM [data]

最好不要使用“JOIN”(除非没有其他方法)。

编辑: 我需要支持条件的用户和不支持条件的用户之间的比例

【问题讨论】:

  • 你想达到什么目的?能否分享一些示例数据和预期结果?

标签: mysql sql google-bigquery


【解决方案1】:

您可以使用内联 case 表达式:

SELECT COUNT(DISTINCT CASE WHEN _language = 'en' THEN _user_id ELSE NULL END) / 
       COUNT(DISTINCT _user_id)
FROM   [data]

【讨论】:

    【解决方案2】:

    您可以使用条件聚合来做到这一点:

    SELECT (COUNT(DISTINCT (CASE WHEN _language = 'en' THEN _user_id END)) /
            COUNT(DISTINCT _user_id)
           )
    FROM data;
    

    问题已标记为 MySQL,但您使用了方括号——这将导致 MySQL 出错。反正你不需要方括号。标准相等比较是 =,而不是 ==(即使 bigquery 支持两者)。

    【讨论】:

    • 这不好...我需要维护条件的用户和不支持条件的用户之间的比例...这似乎不这样做。
    • 您先生,真是个天才!谢谢! (需要等8分钟我才会接受)
    • 如果我想区分多个变量,你知道我会怎么做吗?
    • 如果您使用 MySQL,您只需使用count(distinct col1, col2)。在 Bigquery 中,您可以将字段连接在一起进行计算。请注意,bigquery 近似于 count(distinct),因此在该环境中使用它时要小心。
    猜你喜欢
    • 1970-01-01
    • 2020-12-07
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2019-06-17
    相关资源
    最近更新 更多