Mysql if 子句序列

标签 mysql case-when

我有一个像这样的交易表。 4个字段: 时间 id 类型 金钱

其中一种类型有 3 种不同的子类型 (21,22,23),我想根据 ids 创建其他类型,然后计算每个日期和类型的金额。我就是这样做的。

select date(time), sum(money),
case
when type=2 and id<100 then type=21
when type=2 and id between 100 and 499 then type=22
when type=2 and id>=500 then type=23
when type<>2 then type
end as type
from transactionsTable
where type in (1,2,3,4,21,22,23) and date(time)>='2014-11-01' group by 1,3

一个奇怪的结果是我得到一个 type=0,我在 where 子句中过滤掉了它。 第二件奇怪的事情是我没有得到新创建的类型 21,22,23!

有人能给我指出正确的方向吗?

最佳答案

您不能在 where 中引用类似的类型,也不能在没有某种插入的情况下设置类型。不过,您可以做的是使用此查询的结果编写一个查询来返回您想要的内容。

SELECT  DATE(time), SUM(money),
        CASE
            WHEN type=2 AND id<100 
                THEN 21
            WHEN type=2 AND id BETWEEN 100 AND 499 
                THEN 22
            WHEN type=2 AND id>=500 
                THEN 23
            WHEN type<>2 
                THEN type
        END AS type
FROM transactionsTable
GROUP BY 1,3
HAVING type IN (1,2,3,4,21,22,23) AND DATE(time)>='2014-11-01' 

SIMPLIFIED FIDDLE DEMO

注意:having 子句重新评估结果集,以便您可以在必须包含查询结果的情况下引用类型

关于Mysql if 子句序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26977845/

相关文章:

mysql - 如何仅将没有加入记录的模型添加到集合中 - Eloquent

mysql - 如何使用相同的查询编辑mysql中的多个不同行

c# - 通过数据表使用 Linq to GroupBy 和 Case When

r - 在四个数据框列上应用两个不同的公式

sql - SQL 中 Case 语句的语法错误

sql - 如何根据 Case When 进行不同计数?

php - 如何根据同一 SELECT 中的不同 ID 从表中获取两个值

python - 在保存方法中创建两个对象

python - 如何使用Python数据集中的条件更新相同的字段?

mysql - 如何使用case when计算mysql中的中位数