使用GROUP BY的Sqlite百分比



我有一些包含"货币对"(如欧元/美元,标准普尔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进行比较,这是比较的结果,即01

你想用第二种形式:

... COUNT(CASE WHEN Pl>0.01 THEN 1 END) ...

(注意:不需要ELSE,因为NULL是默认值)

最新更新