mysql查询sql筛选如果某一字段相同,就不去计算采购金额,不相同的计算采购金额 用case when实现
时间: 2024-10-09 22:07:32 浏览: 40
你可以使用MySQL的CASE WHEN语句结合GROUP BY来实现这个需求。假设你想根据某个字段`product_id`对`purchase_amount`进行分组并计算总和,只有当`product_id`不同时才累加采购金额,可以这样做:
```sql
SELECT product_id,
SUM(
CASE
WHEN LAG(product_id) OVER (ORDER BY product_id) = product_id THEN NULL
ELSE purchase_amount
END
) AS total_purchase_amount
FROM your_table
ORDER BY product_id;
```
这里,LAG()函数用于获取当前行前一行的`product_id`值,然后CASE语句判断如果当前行的`product_id`等于前一行,则将`purchase_amount`设为NULL,不计入累计总和;如果不等于,则累加`purchase_amount`。
注意替换`your_table`为实际的表名,并根据需要调整排序条件。
相关问题
mysql case when筛选一个字段把另外一个字段置为null
您可以使用如下的 SQL 语句来实现:
```
UPDATE 表名
SET 字段名 = NULL
WHERE 条件
```
具体地,您可以将以上的 SQL 语句中的 `表名` 替换为您需要进行操作的表的名称,将 `字段名` 替换为您需要置为 NULL 的字段的名称,将 `条件` 替换为您筛选记录的条件。例如,如果您想要将表 `mytable` 中 `field2` 字段的值置为 NULL,当 `field1` 字段的值等于 1 时,可以使用以下的 SQL 语句:
```
UPDATE mytable
SET field2 = NULL
WHERE field1 = 1
```
注意,执行此操作将会修改表中的数据,因此请谨慎操作。
mysql case when筛选字段a把与字段a对应的字段b置为null,不修改原表
您可以使用如下的 SQL 语句来实现:
```
SELECT
CASE WHEN 字段a = '某个值' THEN NULL ELSE 字段b END AS 字段b,
其他字段1,
其他字段2,
...
FROM 表名
WHERE 条件
```
具体地,您可以将以上的 SQL 语句中的 `表名` 替换为您需要进行操作的表的名称,将 `字段a` 和 `字段b` 替换为您需要进行操作的字段的名称,将 `某个值` 替换为您需要筛选的值,将 `其他字段1`、`其他字段2` 等替换为您需要查询的其他字段。例如,如果您想要将表 `mytable` 中 `field2` 字段的值置为 NULL,当 `field1` 字段的值等于 1 时,可以使用以下的 SQL 语句:
```
SELECT
CASE WHEN field1 = 1 THEN NULL ELSE field2 END AS field2,
field3,
field4,
...
FROM mytable
WHERE 条件
```
请注意,这个查询语句不会修改原表中的数据,仅仅是查询结果中将符合条件的字段 `b` 与 `a` 对应的值置为了 NULL。
阅读全文