Sqlite 查询聚合

Sqlite query aggregating

我希望使用 Sqlite3 解决以下问题。我想汇总这些数据:

+--------+-------+----------+----------+--------+
| DRAWID | BETID | TICKETID |  STATUS  | AMOUNT |
+--------+-------+----------+----------+--------+
|      1 |     1 |        1 | OK       |      3 |
|      1 |     2 |        1 | OK       |      2 |
|      1 |     3 |        2 | CANCELED |      4 |
|      1 |     4 |        2 | CANCELED |      7 |
|      1 |     5 |        3 | OK       |      5 |
|      1 |     6 |        3 | OK       |      4 |
+--------+-------+----------+----------+--------+

给以下

+--------+-----------+-----------+--------------+----------+-------------+
| BetsOK | BetsNotOk | TicketsOk | TicketsNotOk | AmountOk | AmountNotOk |
+--------+-----------+-----------+--------------+----------+-------------+
|      4 |         2 |         2 |            1 |       14 |          11 |
+--------+-----------+-----------+--------------+----------+-------------+

为了获得 TicketsOk 的正确分组,我似乎需要执行两个子查询并且必须加入。一个用于 Ok 的子查询和另一个用于 NotOk 的子查询

(SELECT drawId, (DISTINCT ticketId) FROM Bets WHERE drawId =  AND userId = AND Status IN ("OK")) TblTicketsOk ...

在 sqlite3 或一般 sql 中是否存在可能更简单的东西。有人可以帮忙写完整的 sql 语句来解决这个问题吗?

你不需要使用join,尝试在COUNT函数中使用distinctCASE WHEN

SELECT COUNT(distinct(CASE WHEN STATUS = 'OK' then BETID end)) BetsOK,
       COUNT(distinct(CASE WHEN STATUS = 'CANCELED' then BETID end)) BetsNotOk,
       COUNT(distinct(CASE WHEN STATUS = 'OK' then TICKETID  end)) TicketsOk,
       COUNT(distinct(CASE WHEN STATUS = 'CANCELED' then TICKETID  end)) TicketsNotOk,
       SUM(CASE WHEN STATUS = 'OK' then AMOUNT else 0 end) AmountOk,
       SUM(CASE WHEN STATUS = 'CANCELED' then AMOUNT  else 0 end) AmountNotOk
FROM T

Sqlfiddle

[结果]:

| BetsOK | BetsNotOk | TicketsOk | TicketsNotOk | AmountOk | AmountNotOk |
|--------|-----------|-----------|--------------|----------|-------------|
|      4 |         2 |         2 |            1 |       14 |          11 |