[英]Select Statement Conditional WHERE Clause - How do you add a variable not affected by WHERE clause in same query
[英]How Do You SELECT Both With and Without a WHERE in a Query?
我有一個表my_table ,其中包含如下數據:
+---------------------------+
|Accesses | Fruit | Level |
+---------------------------+
| 5 | Apple | 2 |
| 2 | Banana | 3 |
| 2 | Apple | 1 |
| 6 | Cherry | 4 |
| 12 | Apple | 4 |
| 9 | Banana | 1 |
| 1 | Durian | 2 |
+---------------------------+
我正在嘗試編寫一個查詢,該查詢將對 GROUP BY 水果的訪問次數和每個水果的訪問總數求和,但僅對級別小於 4 的訪問進行求和。該查詢的結果將是:
+---------------------------|-------------- +
|Fruit | FilteredAccesses | TotalAccesses |
+---------------------------+---------------+
|Apple | 7 | 19 |
|Banana | 11 | 11 |
|Durian | 1 | 1 |
+-------------------------------------------+
我嘗試了以下自連接,但沒有得到預期的結果:
SELECT A.Fruit, SUM(A.Accesses) AS FilteredAccesses, SUM(B.Accesses) As TotalAccesses
FROM my_table A, my_table B
WHERE (A.Fruit = B.Fruit) AND (A.Level < 4)
GROUP BY A.Fruit
有什么我想念的嗎? 這甚至可以通過自連接來完成嗎?
使用條件聚合:
SELECT A.Fruit, SUM(CASE WHEN A.LEVEL < 4 THEN A.Accesses ELSE 0 END) AS FilteredAccesses,
SUM(A.Accesses) As TotalAccesses
FROM my_table A
GROUP BY A.Fruit
不需要自我加入。 您可以在單個聚合查詢中執行此操作。 訣竅是在level
上使用case
表達式來計算“過濾”訪問,以便只考慮滿足條件的行。
select fruit,
sum(case when level < 4 then accesses else 0 end) filtered_accesses,
sum(accesses) total_accesses
from mytable
group by fruit
這種技術稱為條件聚合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.