【问题标题】:How to use the same column as check and condition in WHERE clause如何在 WHERE 子句中使用与检查和条件相同的列
【发布时间】:2022-07-06 00:40:01
【问题描述】:

是否可以根据条件中的确切列过滤列?我需要计算每个生命周期中不同 ID 的数量。例如,如果生命周期 = 10,我需要计算生命周期在 10 到 30 之间的所有唯一 ID。

如果我写

SELECT 
  lifetime, 
  COUNT(DISTINCT id_ru) AS number
FROM lifetime_count
WHERE lifetime BETWEEN lifetime AND 30
GROUP BY 1
ORDER BY 1
LIMIT 15

如果我像这样硬编码所需的生命周期值,我会得到不同的结果,例如

SELECT 
  COUNT(DISTINCT id_ru) AS number
FROM lifetime_count
WHERE lifetime BETWEEN 0 AND 30

SELECT 
  COUNT(DISTINCT id_ru) AS number
FROM lifetime_count
WHERE lifetime BETWEEN 1 AND 30

...

【问题讨论】:

    标签: sql database where-clause


    【解决方案1】:

    您也可以通过以下方式解决此问题:

    • 使用COUNT 聚合函数计算每个生命周期中 id_ru 的不同值
    • 使用窗口函数SUM 计算此计数的运行总和
    WITH cte AS (
        SELECT lifetime, COUNT(DISTINCT id_ru) AS cnt
        FROM tab
        GROUP BY lifetime
        ORDER BY lifetime
    )
    SELECT lifetime, SUM(cnt) OVER(ORDER BY lifetime) AS cnt 
    FROM cte
    

    这是一个 MySQL demo,它可以为您提供总体思路和一些可玩的东西,尽管这些构造可以在任何 DBMS 中找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多