[英]SQL - Selecting two Columns with two different conditions
我正在尝试使用 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 |
我需要显示cur_rate
为from_cur
和to_cur
来自用户的输入,也需要显示cur_rate
默认to_cur
考虑为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 中实现这一点?
您可以使用以下查询
SELECT
max(CASE WHEN to_cur = 'EUR' THEN cur_rate ELSE 0 END) as cur_rate,
max(CASE WHEN to_cur = 'BTC' THEN cur_rate ELSE 0 END) as default_value
FROM currency_rates
WHERE from_cur = 'BNB'
select c.cur_rate, c2.cur_rate default_value
from currency_rates c
join currency_rates c2 on c.from_cur=c2.from_cur and c2.to_cur='BTC'
where c.from_cur='BNB' and c.to_cur='EUR'
你能澄清一下如何使用它吗? 如果您正在检索from_cur和to_cur的单个组合的输出,则以下内容可能有用:
select
a.cur_rate
,b.default_rate
from
(
select
cur_rate
from
table
where
from_cur = from_cur_inp #'BNB'
and
to_cur = to_cur_inp #'EUR'
)a
cross join
(
select
cur_rate as default_rate
from
table
where
from_cur = from_cur_inp #'BNB'
and
from_cur = default_cur #'BTC'
)b
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.