Sqlite查询聚合
我希望使用Sqlite3解决以下问题。我想汇总这些数据: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 |
+--------+-------+----------+----------+--------+
| 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
:)