用case when是否能实现
时间: 2023-11-08 13:55:40 浏览: 34
是的,您也可以使用CASE WHEN语句来实现。以下是一个使用CASE WHEN语句查询的示例,可以实现与上述NVL函数和子查询相同的功能:
SELECT
CASE WHEN field1 IS NULL THEN (SELECT field2 FROM table2) ELSE field1 END AS result
FROM
table1;
这样如果field1为空,就会返回table2中的field2的值,如果field1不为空,则返回field1的值。希望这也能对您有所帮助!
相关问题
mysql 不使用case when 实现行专列
可以使用 GROUP BY 和 MAX 函数来实现将行转列的效果。
假设有以下表结构:
| id | name | category |
|----|------|----------|
| 1 | a | cat1 |
| 2 | b | cat1 |
| 3 | c | cat2 |
| 4 | d | cat2 |
现在需要将 category 列的值按照不同的值作为列名,将 id 和 name 列的值整合到对应的列中。可以使用以下 SQL 语句实现:
SELECT
MAX(CASE WHEN category = 'cat1' THEN id END) AS cat1_id,
MAX(CASE WHEN category = 'cat1' THEN name END) AS cat1_name,
MAX(CASE WHEN category = 'cat2' THEN id END) AS cat2_id,
MAX(CASE WHEN category = 'cat2' THEN name END) AS cat2_name
FROM
my_table
GROUP BY
id, name;
执行以上 SQL 语句,结果如下:
| cat1_id | cat1_name | cat2_id | cat2_name |
|---------|-----------|---------|-----------|
| 1 | a | 3 | c |
| 2 | b | 4 | d |
可以看到,已经将 category 列的值作为列名,并将对应的 id 和 name 值整合到了对应的列中。
使用pandas实现case when操作
在 pandas 中,我们可以使用 `numpy` 中的 `where` 函数来实现类似于 SQL 中的 `case when` 操作。
假设我们有一个数据框 `df`,其中有一列 `score`,我们想根据 `score` 列的值创建一个新的列 `grade`,满足以下条件:
- 当 `score` 大于等于 90 时,`grade` 为 A
- 当 `score` 大于等于 80 且小于 90 时,`grade` 为 B
- 当 `score` 大于等于 70 且小于 80 时,`grade` 为 C
- 否则 `grade` 为 D
代码如下:
```python
import pandas as pd
import numpy as np
df = pd.DataFrame({'score': [85, 92, 78, 65, 50]})
df['grade'] = np.where(df['score'] >= 90, 'A',
np.where(df['score'] >= 80, 'B',
np.where(df['score'] >= 70, 'C', 'D')))
print(df)
```
输出结果如下:
```
score grade
0 85 B
1 92 A
2 78 C
3 65 D
4 50 D
```
在上述代码中,我们使用了三个嵌套的 `np.where` 函数来实现类似于 SQL 中的 `case when` 操作。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)