MySQL:当';旗帜';列的值为1

MySQL:当';旗帜';列的值为1,mysql,Mysql,在下面的视图中: CREATE VIEW msr_joined_view AS SELECT table1.id AS msr_id, table1.msr_number, table1.overview, SUM(table2.quantity * table2.unit_price) AS grand_total FROM table1 INNER JOIN table2 ON table1.id = table2.msr_id GROUP BY table1.msr_number

在下面的视图中:

CREATE VIEW msr_joined_view AS 
SELECT table1.id AS msr_id, table1.msr_number, table1.overview, 
SUM(table2.quantity * table2.unit_price) AS grand_total 
FROM table1 
INNER JOIN table2 ON table1.id = table2.msr_id 
GROUP BY table1.msr_number;
我需要
SUM(table2.quantity*table2.unit\u price)
忽略列
table2.deleted\u record
等于1的任何行,以便如果我的表中有以下数据:

table2
------
  msr_id(FK)  quantity    unit_price     deleted_record
  ----------  --------    ----------     --------------
     3          3             1.00          0
     3          10            9.99          1
     3          1             5.00          0
该组的总积分应仅为6.00


我不擅长使用SQL IF或CASE语句。这是一种方法,还是有更好的方法?

你需要一个过滤器。可以通过添加where子句来实现这一点

CREATE VIEW msr_joined_view AS 
SELECT table1.id AS msr_id, table1.msr_number, table1.overview, 
SUM(table2.quantity * table2.unit_price) AS grand_total 
FROM table1 
INNER JOIN table2 ON table1.id = table2.msr_id
WHERE table2.Deleted_record != 1
GROUP BY table1.msr_number;
作为你和其他人的参考,正如评论中指出的,having子句也很有用

例如,假设您希望筛选汇总结果,其中总计需要大于10。你可以这样做

CREATE VIEW msr_joined_view AS 
SELECT table1.id AS msr_id, table1.msr_number, table1.overview, 
SUM(table2.quantity * table2.unit_price) AS grand_total 
FROM table1 
INNER JOIN table2 ON table1.id = table2.msr_id
WHERE table2.Deleted_record != 1
GROUP BY table1.msr_number;
HAVING grand_total > 10

是否需要查看要排除的行?为什么不在聚合之前添加一个Where子句来过滤掉它呢?在合计记录组时,不需要考虑任何带有
deleted\u record=1
的行。视图不需要知道它们。我不确定在我的CREATE语句中放置where子句的位置,但这可能会满足我的需要。如果您查找SQL查询语法的基本指南,您将知道在源表(
from
join
)子句和
groupby
之间放置
where
子句的位置。(额外好处:可选的
having
子句类似于
where
,但在分组后应用,因此它可以在聚合上进行过滤。)将其添加到分组之前和joinWhere table 2.Deleted_record=0参见上面的我的评论。出于某种奇怪的原因,这不起作用,但将其更改为
WHERE table2.deleted_record=1
有。我不确定为什么会有不同的评估,但我更新了答案,以便其他人可以得到有效的答案。数据类型是什么?是整数还是一点点?或者字符串loltinyint(1)不是null我想知道<1是否有效。如果你尝试一下,它可能会帮助我了解发生了什么。如果你还有其他事情要做,别担心。