当前位置: 首页 > 面试题库 >

您可以在CASE WHEN THEN别名下进行GROUP BY吗?

有耀
2023-03-14
问题内容

我有一个从CASE WHEN THEN状态(或可以使用多个IF语句)别名为“
Length”的情况下计算出的SELECT语句,我需要正确地将结果分组在一起。SELECT似乎有效,但是该组将它们分组错误。这是我的声明:

SELECT CASE 
    WHEN DATEDIFF(o.EndDate, o.StartDate) < 30 THEN '<1 Month'
    WHEN DATEDIFF(o.EndDate, o.StartDate) < 90 THEN '1 - 2 Months'
    WHEN DATEDIFF(o.EndDate, o.StartDate) < 210 THEN '3 - 4 Months'
    ELSE '>4 Months' END AS 'Length', 
    COUNT(DISTINCT(person.ID)) AS 'COUNT'
FROM person
    INNER JOIN opportunity AS o
    INNER JOIN Organization AS org
    ON person.EntityID = o.id 
        AND O.OrganizationID = Org.ID
WHERE person.TitleID = 2
    AND o.bID = 1
GROUP BY 'Length'
ORDER BY 'Length' ASC;

这会将所有结果分组为“ 3-4个月”,这是不正确的。


问题答案:

如果您没有将整个CASE语句GROUP BY包装在子查询中,则需要使用该语句中的整个语句。

SELECT  CASE 
            WHEN DATEDIFF(o.EndDate, o.StartDate) < 30 THEN '<1 Month'
            WHEN DATEDIFF(o.EndDate, o.StartDate) < 90 THEN '1 - 2 Months'
            WHEN DATEDIFF(o.EndDate, o.StartDate) < 210 THEN '3 - 4 Months'
            ELSE '>4 Months' 
        END AS `Length`, 
        COUNT(DISTINCT(person.ID)) AS `COUNT`
FROM    person
        INNER JOIN opportunity AS o
            ON person.EntityID = o.id
        INNER JOIN Organization AS org
            ON o.OrganizationID = Org.ID
WHERE   person.TitleID = 2
        AND o.bID = 1
GROUP   BY  CASE 
                WHEN DATEDIFF(o.EndDate, o.StartDate) < 30 THEN '<1 Month'
                WHEN DATEDIFF(o.EndDate, o.StartDate) < 90 THEN '1 - 2 Months'
                WHEN DATEDIFF(o.EndDate, o.StartDate) < 210 THEN '3 - 4 Months'
                ELSE '>4 Months' 
            END
ORDER   BY Length ASC;

还要删除ORDER BY子句中列名周围的单引号。



 类似资料:
  • 问题内容: 好的,我在一两个星期前遇到了一个简单的布局问题。即页面的各个部分需要一个标题: 很简单的东西。在网络世界中,表仇恨似乎已经接管了一切,当我问[为什么对HTML表单而不是表使用定义列表(DL,DD,DT)标签]时,我想起了这件事。现在,前面已经讨论了表vsdivs / CSS的一般主题 因此,这并不是要对CSS与布局表进行一般性讨论。这只是解决一个问题的方法。我使用CSS尝试了上述各种解

  • 问题内容: 在Python中,是否可以为导入的模块定义别名? 例如: …因此具有别名“ short_name”。 问题答案: 也适用于

  • 我需要下一行中的结果数据帧,以便在groupBy之后的max('diff')列具有别名“maxDiff”。但是,下面的行不会进行任何更改,也不会引发错误。

  • 问题内容: 我将Oracle用作数据库层,但是问题是通过OCI8(我做了一个PDO用户空间驱动程序)的oracle仅支持SQL语句中的命名参数,不支持定位的参数。(例如使用多个?) 从根本上讲,是Laravel的Eloquent生成了SQL,但是我找不到任何有关如何重写参数构造的文档。 我希望能够以“:name”的形式创建命名参数,而不是放置多个“?” 整个查询。 能做到吗?我的猜测是它与数据库语

  • 我如何指定整个文档,而不是注释捕获组$0,就像这样: 这可能是一个非常有用的特性,当发现特定的令牌模式时,它允许注释整个文档(或者可能是一个句子)。谢了。

  • 问题内容: 我正在考虑拥有一个可以根据需要动态创建新表的程序。我可以在MySQL中使用仅以数字命名的表吗? 问题答案: 命名对象的规则,包括MySql中的表: http://dev.mysql.com/doc/refman/5.1/zh- CN/identifiers.html 标识符可以以数字开头,但 除非加引号, 否则不能仅由数字组成。 因此,这将是无效的: 但是以下内容将有效: 或者,如果以