簡體   English   中英

如何在 WHERE 子句中使用與檢查和條件相同的列

[英]How to use the same column as check and condition in WHERE clause

是否可以根據條件中的確切列過濾列? 我需要計算每個生命周期中不同 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

...

您還可以通過以下方式解決此問題:

  • 使用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 DESC) AS cnt 
FROM cte
ORDER BY lifetime

這是一個 MySQL演示,可以為您提供總體思路和一些可以玩的東西,盡管這些結構可以在任何 DBMS 中找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM