我有一些包含"货币对"(如欧元/美元,标准普尔500指数/美元等)和Pl等信息的数据。我可以使用
获得wins SELECT "Currency Pair", COUNT(Pl) AS Win FROM data WHERE Pl>0.01
GROUP BY "Currency Pair";
,而操作总数由
给出 SELECT "Currency Pair", COUNT(Pl) AS Total FROM data WHERE ABS(Pl)>0.01
GROUP BY "Currency Pair";
现在我想打印一个像
这样的表 Currency Pair Win Tot Success rate
--------------- --- --- ------------
EUR/USD 3 11 27.27
SPX500/USD 6 8 75.00
但不幸的是,我不能正确计算百分比,也不能在同一张表上打印Win和Tot。我的主要问题是传递两个不同的WHERE。
作为另一种方法,我尝试了
SELECT "Currency Pair",
COUNT(CASE Pl WHEN Pl>0.01 THEN 1 ELSE NULL END) AS WIN,
COUNT(Pl) AS Total FROM data WHERE ABS(Pl)>0.01
GROUP BY "Currency Pair";
但是,虽然总数是正确的,但赢栏上有零
CASE表达式有两种形式:
-
CASE SomeValue WHEN X1 ... WHEN X2 ...
,其中SomeValue
与每个X
比较,和 -
CASE WHEN Condition1 ... WHEN Condition2 ...
,其中每个布尔Condition
被独立求值。
在您的查询中,您有值P1
,它与值P1>0.01
进行比较,这是比较的结果,即0
或1
。
你想用第二种形式:
... COUNT(CASE WHEN Pl>0.01 THEN 1 END) ...
(注意:不需要ELSE,因为NULL是默认值)