MySQL使用不同的where子句选择并计数2列

MySQL使用不同的where子句选择并计数2列,mysql,subquery,Mysql,Subquery,我认为这应该很容易,但根本不起作用。我有一个表,我想生成一个图表,该图表显示分组项目,其中一个where子句(第1列)应显示状态为0的条目,另一个where子句(第2列)应显示状态为1的条目 如果我只执行一个查询,它就可以正常工作,但我希望在一个组合查询中同时执行两个查询(状态0和状态1) 状态0查询: SELECT item,quantity, COUNT(status) FROM `table` WHERE `retry` = 1 AND `status` = 0 GROUP BY ite

我认为这应该很容易,但根本不起作用。我有一个表,我想生成一个图表,该图表显示分组项目,其中一个where子句(第1列)应显示状态为0的条目,另一个where子句(第2列)应显示状态为1的条目

如果我只执行一个查询,它就可以正常工作,但我希望在一个组合查询中同时执行两个查询(状态0和状态1)

状态0查询:

SELECT item,quantity, COUNT(status) FROM `table` 
WHERE `retry` = 1
AND `status` = 0
GROUP BY item,quantity
ORDER BY COUNT(status) DESC
状态1查询:

SELECT item,quantity, COUNT(status) FROM `table` 
WHERE `retry` = 1
AND `status` = 1
GROUP BY item,quantity
ORDER BY COUNT(status) DESC
我尝试将两者结合起来(不起作用)


请检查一下,对你有用吗

请试试这个

 SELECT
    item,quantity,
    COUNT(case when status =1 then 1 end) AS status1,
    COUNT(case when status =0 then 1 end) AS status0
  FROM table
SQL Fiddle测试数据:

CREATE TABLE testtable
    (`id` int, `item` bigint(15), `quantity` double,`status` int(2),`retry` int(2))
;

INSERT INTO testtable
    (`id`, `item`, `quantity`, `status`, `retry`)
VALUES
    (1, '452457824', '1.0', '1', '1'),
    (2, '452457824', '1.0', '1', '1'),
    (3, '452457824', '0.5', '1', '1'),
    (4, '452457824', '0.5', '0', '1'),
    (5, '452457824', '0.5', '0', '1'),
    (6, '452457824', '0.5', '0', '1'),
    (7, '21432423', '1.0', '1', '1'),
    (8, '21432423', '1.0', '1', '1'),
    (9, '21432423', '1.0', '0', '1'),
    (10, '21432423', '1.0', '0', '1'),
    (11, '3455467567', '2.0', '1', '1'),
    (12, '3455467567', '2.0', '1', '1'),
    (13, '3455467567', '2.0', '0', '1'),
    (14, '3455467567', '2.0', '0', '1'),
    (15, '3455467567', '2.0', '0', '1'),
    (16, '3455467567', '1.0', '1', '1'),
    (17, '3455467567', '1.0', '1', '1'),
    (18, '3455467567', '1.0', '1', '1')
;

如果你喜欢,考虑下面简单的两步行动:1。如果您还没有这样做,请提供适当的DDL(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果您还没有这样做,请提供与步骤1中提供的信息相对应的所需结果集。我会为您编写用例条件。我如何才能以最佳方式提供SQL Fiddle数据?感谢您的快速响应,但它没有按预期工作,我将您在where子句中的语句也更改为(0,1)中的“和
status
”,但根据具体情况,它只会显示NULL。我刚才看到,(0,1)中的“和
status
”语句“同时计数,而不是单独显示。有没有办法做到这一点?@GoldgrubeVerlag它会同时显示空值?删除group by和order by,如果不起作用,请重试如果失败,请告诉我结果如何you@GoldgrubeVerlag我编辑了这个问题,我让它简单化了,它只显示在一个或另一个空值中,但在我删除了group by和order by之后,它只计算状态1中的所有值,并在状态0中说空值。。。
CREATE TABLE testtable
    (`id` int, `item` bigint(15), `quantity` double,`status` int(2),`retry` int(2))
;

INSERT INTO testtable
    (`id`, `item`, `quantity`, `status`, `retry`)
VALUES
    (1, '452457824', '1.0', '1', '1'),
    (2, '452457824', '1.0', '1', '1'),
    (3, '452457824', '0.5', '1', '1'),
    (4, '452457824', '0.5', '0', '1'),
    (5, '452457824', '0.5', '0', '1'),
    (6, '452457824', '0.5', '0', '1'),
    (7, '21432423', '1.0', '1', '1'),
    (8, '21432423', '1.0', '1', '1'),
    (9, '21432423', '1.0', '0', '1'),
    (10, '21432423', '1.0', '0', '1'),
    (11, '3455467567', '2.0', '1', '1'),
    (12, '3455467567', '2.0', '1', '1'),
    (13, '3455467567', '2.0', '0', '1'),
    (14, '3455467567', '2.0', '0', '1'),
    (15, '3455467567', '2.0', '0', '1'),
    (16, '3455467567', '1.0', '1', '1'),
    (17, '3455467567', '1.0', '1', '1'),
    (18, '3455467567', '1.0', '1', '1')
;