SQL 菜鳥,試圖獲得一些按唯一名稱分組的幫助,提供計數,僅過濾 2021 年的開始日期。這就是我到目前為止所擁有的,也是我迷路的原因。
我的表:
| name | start |
|----------|---------------------------------|
| Michigan | 01-JAN-21 01.00.00.000000000 AM |
| State | 01-JAN-20 01.00.00.000000000 AM |
| State | 01-JAN-21 01.00.00.000000000 AM |
| State | 01-FEB-21 01.00.00.000000000 AM |
| Indiana | 01-FEB-21 01.00.00.000000000 AM |
| Michigan | 01-FEB-21 01.00.00.000000000 AM |
| State | 01-MAR-21 01.00.00.000000000 AM |
試圖獲取名稱的計數,僅篩選 2021 年的開始日期。這就是我希望我的輸出的樣子:
| name | Count |
|----------|-------|
| Michigan | 2 |
| State | 3 |
| Indiana | 1 |
我的代碼:
select name, count(name) from my_table
group by name, start
having start >= '01-JAN-21 01.00.00.000000000 AM'
但這會重復名稱(因為唯一的開始日期)并且不提供聚合計數。我無法通過“開始”洗掉組,因為這會在 SQL 中輸出錯誤。所以我不確定如何達到我想要的輸出。非常感謝一些指導。
uj5u.com熱心網友回復:
have is 用于分組后過濾,以便您根據聚合進行過濾,您可以在此處分組前進行過濾,因此請使用 where。
從組中洗掉開始,您只需要名稱。
有一個函式可以用來從日期中獲取年份, https://docs.oracle.com/javadb/10.8.3.0/ref/rrefyearfunc.html
Select name, count(name)
From my_table
where year(start) = 2021
Group by name
或者如果 start 是 char 或 varchar 那么你可以做
Select name, count(name)
From my_table
where substr(start, 8, 2) = '21'
Group by name
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362361.html
上一篇:在c中將字串轉換為time_t
