【发布时间】:2021-07-10 16:46:19
【问题描述】:
我正在尝试使用 SQL 上的单个查询在同一个表上选择具有 2 个不同条件的 2 列。
我的表结构如下
| id | from_cur | to_cur | cur_rate |
|----|----------|--------|----------|
| 1 | BTC | USDT | 1.2 |
| 3 | BTC | BUSD | 1.5 |
| 4 | BTC | EUR | 2.4 |
| 4 | BTC | BNB | 1.6 |
| 5 | BTC | BTC | 1 |
| 6 | BNB | USDT | 1.8 |
| 7 | BNB | BUSD | 1.02 |
| 8 | BNB | EUR | 2.34 |
| 9 | BNB | BTC | 1.34 |
| 10 | BNB | BNB | 1 |
我需要从用户输入中为from_cur 和to_cur 显示cur_rate,还需要为默认的to_cur 显示cur_rate 考虑为BTC
如果from_cur 是 BNB 而to_cur 是 EUR,这就是我想要的结果
| cur_rate | default_rate |
|----------|--------------| // cur_rate = BNB to EUR
| 2.34 | 1.34 | // default_rate = BNB to BTC
以下是我试过的查询
SELECT
CASE
WHEN to_cur = 'EUR'
THEN cur_rate
ELSE 0
END AS cur_rate,
CASE
WHEN to_cur = 'BTC'
THEN cur_rate
ELSE 0
END AS default_value
FROM currency_rates
WHERE from_cur = 'BNB'
这会导致 n 行为 0,如下所示。
+----------+---------------+
| cur_rate | default_value |
+----------+---------------+
| 0 | 1.34 |
| 0 | 0 |
| 2.34 | 0 |
| . | . |
| . | . |
| 0 | 0 |
+----------+---------------+
我不希望显示 0 的条目,因此尝试在 WHERE 子句中使用 CASE 语句别名,但这不起作用,因为 WHERE 是在 SELECT 列表之前计算的。
谁能建议我如何通过单个查询在 SQL 中实现这一点?
【问题讨论】:
标签: mysql sql where-clause