【问题标题】:Sqlite query aggregatingSqlite 查询聚合
【发布时间】:2018-12-18 00:36:21
【问题描述】:

我希望使用 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 语句来解决这个问题吗?

【问题讨论】:

  • 所以您只是要求一种更有效的方式来编写您的脚本?

标签: sql sqlite aggregate-functions case-when


【解决方案1】:

你不需要使用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 |

【讨论】:

  • 太棒了! ps:可以不用else nullSQL Fiddle DEMO
  • @ITWeiHan 是的,你是对的,因为它默认是NULL :)
猜你喜欢
  • 2019-05-07
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 2013-12-06
  • 2021-09-27
  • 2014-11-26
相关资源
最近更新 更多