【问题标题】:Simplify SQL Query into sql statement将 SQL 查询简化为 sql 语句
【发布时间】:2011-12-09 13:58:53
【问题描述】:

tblticket

身份问题状态
1 测试 1
2 测试 2
3 测试 3

我想根据状态 1、2、3 等来查找计数

我写了3条sql语句如下

从状态=1的票证中选择计数(*)
从状态 = 2 的票证中选择计数(*)
select count(*) from ticket where status=3

任何将其简化为单个查询的方法

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    简单的答案是

    select count(*), status
    from ticket
    group by status
    

    但是,如果您没有状态行,这会产生不同的结果,因为此处记录的行为:Does COUNT(*) always return a result?

    假设您只需要 3 个状态值:

    select count(t.status), s.status
    from
       (SELECT 1 AS status UNION  ALL SELECT 2 UNION  ALL SELECT 3) s
       LEFT JOIN
       ticket t ON s.status = t.status 
    group by
       s.status
    

    ..或使用单独的状态查找表:

    select  count(t.status), s.status
    from
       (SELECT DISTINCT status FROM status) s
       LEFT JOIN
       ticket t ON s.status = t.status 
    group by
       s.status
    

    【讨论】:

    • 哈,0:20 有我!炸毁我的慢速连接:)
    【解决方案2】:
    SELECT status, COUNT(*)
    FROM tblticket
    GROUP BY status
    

    如果你真的只想要这三种状态,你也可以这样做:

    SELECT status, COUNT(*)
    FROM tblticket
    WHERE status IN (1, 2, 3)
    GROUP BY status
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 2023-03-07
      • 2021-01-11
      • 2017-02-01
      • 1970-01-01
      相关资源
      最近更新 更多