SQLite3数据库条件求和

时间:2016-01-30 03:04:22

标签: sql sqlite

我希望根据包含订单请求的数据库中的订单数量来订购密钥列表。基本上,在表格上,称之为订单(o_partkey,o_returnflag)我试图获得每个订单的总回报数。我已尝试使用目标架构返回列表(partkey,numreturns)的以下代码段的许多变体:

select O.o_partkey as partkey,
    count(case when O.o_returnflag = 'R' then 1 else 0 end) as numreturns
from orders O
orderby quantity_returned desc;

我是SQLite的新手,我只是跳进了基础知识。这是对作业问题的调整(实际问题更复杂),但我已经简化了我的问题。

2 个答案:

答案 0 :(得分:0)

考虑使用带有SUM()的派生表子查询作为聚合函数:

SELECT dT.partkey, dT.numreturns
FROM
   (SELECT O.o_partkey as partkey,
       SUM(CASE WHEN O.o_returnflag = 'R' THEN 1 ELSE 0 END) as numreturns       
    FROM [ORDER] O
    GROUP BY O.o_partkey) AS dT
ORDER BY dT.numreturns DESC;

请确保将表格括在[ORDER]的{​​{3}}。

答案 1 :(得分:0)

您的问题是COUNT计算,因此它会计算01值。

您对任何其他行都不感兴趣,因此您只需使用WHERE过滤掉回报:

SELECT o_partkey AS partkey,
       COUNT(*) AS numreturns
FROM orders
WHERE o_returnflag = 'R'
ORDER BY 2 DESC;