Sqlite查询聚合

Sqlite查询聚合,sql,sqlite,aggregate-functions,case-when,Sql,Sqlite,Aggregate Functions,Case When,我希望使用Sqlite3解决以下问题。我想汇总这些数据: +--------+-------+----------+----------+--------+ | DRAWID | BETID | TICKETID | STATUS | AMOUNT | +--------+-------+----------+----------+--------+ | 1 | 1 | 1 | OK | 3 | | 1 | 2 |

我希望使用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
函数中尝试使用
distinct
CASE

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

[结果]

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

那么你只是想用一种更有效的方式来写你的脚本吗?太棒了!ps:它可以不带
否则为null
@ITWeiHan是的,你是对的,因为它默认为
null
:)