【问题标题】:SQL Query - Multiple counts on multiple conditionsSQL 查询 - 多个条件下的多次计数
【发布时间】:2019-08-10 09:54:30
【问题描述】:

假设有一个名为“Table1”的简单表,其中只有一个整数类型的“responseTime”列。 我希望在单个查询中获得“responseTime”值小于 10 的行数、小于 50 的行数和小于 100 的行数。

我需要在 Sybase 和 MySql 中运行它。

【问题讨论】:

    标签: mysql sql sybase


    【解决方案1】:

    你可以这样做

    SELECT 
     SUM(IF(responseTime<10,1,0)) as data1,
     SUM(IF(responseTime<=10 AND responseTime<50,1,0)) as data 2,
     SUM(IF(responseTime<100,1,0)) as data3
    FROM table1
    WHERE ...
    

    【讨论】:

      【解决方案2】:

      如果 OP 想要 3 个单独的行而不是字段,每个包含计数,则可以使用 UNION

      SELECT count(*) WHERE responseTime < 10
      UNION
      SELECT count(*) WHERE responseTime <= 10 AND responseTime < 50
      UNION
      SELECT count(*) WHERE responseTime >= 50 AND responseTime < 100
      

      这将返回 3 个单独的行,每行具有相应的 count

      不清楚 OP 是否想要一个单独的结果 set 或单个 result

      【讨论】:

        【解决方案3】:
        SELECT 
            SUM(responseTime < 10),
            SUM(responseTime >= 10 AND responseTime < 50),
            SUM(responseTime >= 50 AND responseTime < 100)
        FROM Table1
        

        @L.Scott Johnson 发表评论后,我不确定您的目标是什么。因此,如果您需要重复计算记录,这是另一种方法:

        SELECT 
            SUM(responseTime < 10),
            SUM(responseTime < 50),
            SUM(responseTime < 100)
        FROM Table1
        

        【讨论】:

        • 我认为 OP 正在寻求对
        • @L.ScottJohnson OP 可以很容易地修改这个查询,它是自显式的。无论他需要什么条件。
        猜你喜欢
        • 2019-06-11
        • 1970-01-01
        • 2021-07-17
        • 1970-01-01
        • 2015-02-16
        • 1970-01-01
        • 2021-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多