全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1767
推到 Plurk!
推到 Facebook!

請問如何用 SQL 下命令去過濾某個次數以上的資料?

答題得分者是:pedro
jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-24 19:00:17 IP:211.21.xxx.xxx 訂閱
例如:資料結構如下。
機型 char(20),日期 char(8),人員 char(20)

我想要尋找同一機型出現2次以上的資料時,我該如何下SQL命令?
我目前是用程式來過濾,但這樣會使得執行的速度明顯的變慢
所以,想尋找更快速的方式。
------
無所不在
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-02-24 22:58:53 IP:59.126.xxx.xxx 訂閱
hi, 試試下面這樣

[code sql]
Select 機型, Count(機型) as Total from Table Group by 機型 order by Count(機型) desc
[/code]

===================引 用 jtain 文 章===================
例如:資料結構如下。
機型 char(20),日期 char(8),人員 char(20)

我想要尋找同一機型出現2次以上的資料時,我該如何下SQL命令?
我目前是用程式來過濾,但這樣會使得執行的速度明顯的變慢
所以,想尋找更快速的方式。
------
價值的展現,來自於你用哪一個角度來看待它!!
boss.tw
高階會員


發表:15
回覆:109
積分:194
註冊:2005-05-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-24 23:01:40 IP:122.116.xxx.xxx 訂閱
table = 資料表
type = 型號欄位
[code sql]
SELECT* FROM `table` WHERE 1 AND `type`=`type1`
[/code]

===================引 用 jtain 文 章===================
例如:資料結構如下。
機型 char(20),日期 char(8),人員 char(20)

我想要尋找同一機型出現2次以上的資料時,我該如何下SQL命令?
我目前是用程式來過濾,但這樣會使得執行的速度明顯的變慢
所以,想尋找更快速的方式。
pedro
尊榮會員


發表:152
回覆:1177
積分:865
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-02-25 09:40:29 IP:60.248.xxx.xxx 未訂閱
試看看
[code sql]
declare @work table(mtype char(20),xdate char(8),operator char(20))
insert @work
select 'A001','20081122','PEDRO'

insert @work
select 'A001','20081125','JOHN'

insert @work
select 'A003','20081115','PEDRO'

select *
from
(
select a1.mtype,count(a2.xdate) times
from @work a1 join @work a2 on a1.mtype=a2.mtype and a1.xdate=a2.xdate
group by a1.mtype
) t
where times>=2
[/code]
jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-02-25 09:47:15 IP:211.21.xxx.xxx 訂閱
我目前就是這樣用啊!但我只需要 total 大於 2 以上的,所以就變成我還需要用程式來判斷
我目前就是想尋找直接用SQL完成而不需要另外用程式來過濾,因為這樣會導致效率大幅度的降低。


===================引 用 careychen 文 章===================
hi, 試試下面這樣

[code sql]
Select 機型, Count(機型) as Total from Table Group by 機型 order by Count(機型) desc
[/code]
------
無所不在
jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-02-25 10:01:35 IP:211.21.xxx.xxx 訂閱
不好意思,底下的「type1」在這裡是什麼?

===================引 用 boss.tw 文 章===================
table = 資料表
type = 型號欄位
[code sql]
SELECT* FROM `table` WHERE 1 AND `type`=`type1`
[/code]
------
無所不在
jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-02-25 10:29:47 IP:211.21.xxx.xxx 訂閱
不好意思,我用的 MS SQL,你的命令我在MS SQL裡是無效的....
我本來想用你的方式改成ms SQL,前面的新增資料,我不用管吧
但...原諒我才疏學淺,還是套用失敗!

===================引 用 pedro 文 章===================
試看看
[code sql]
declare @work table(mtype char(20),xdate char(8),operator char(20))
insert @work
select 'A001','20081122','PEDRO'

insert @work
select 'A001','20081125','JOHN'

insert @work
select 'A003','20081115','PEDRO'

select *
from
(
select a1.mtype,count(a2.xdate) times
from @work a1 join @work a2 on a1.mtype=a2.mtype and a1.xdate=a2.xdate
group by a1.mtype
) t
where times>=2
[/code]
------
無所不在
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-02-25 10:38:11 IP:60.248.xxx.xxx 訂閱
哦,您一開始並沒說您有這樣用,抱歉,您在 Group 的後面加個 Having 就行了

[code sql]
Select 機型, Count(機型) as Total from Table Group by 機型 Having Count(機型) > 2 order by Count(機型) desc
[/code]

===================引 用 jtain 文 章===================
我目前就是這樣用啊!但我只需要 total 大於 2 以上的,所以就變成我還需要用程式來判斷
我目前就是想尋找直接用SQL完成而不需要另外用程式來過濾,因為這樣會導致效率大幅度的降低。


===================引 用 careychen 文 章===================
hi, 試試下面這樣

[code sql]
Select 機型, Count(機型) as Total from Table Group by 機型 order by Count(機型) desc
[/code]
------
價值的展現,來自於你用哪一個角度來看待它!!
pedro
尊榮會員


發表:152
回覆:1177
積分:865
註冊:2002-06-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-02-25 10:53:07 IP:60.248.xxx.xxx 未訂閱
where後面大於改成半形,整段貼到SQL Query Analyzer即可測試

===================引 用 jtain 文 章===================
不好意思,我用的 MS SQL,你的命令我在MS SQL裡是無效的....
where times>=2

jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-02-25 13:31:53 IP:211.21.xxx.xxx 訂閱
可以了,謝謝啦!
因為 careychen 大大地方法所取得的筆數會比 pedro 大大得到的少很多,
大概是我修改成我的資料時出錯,所以得分給 pedro 了。
------
無所不在
編輯記錄
jtain 重新編輯於 2009-02-25 13:40:16, 註解 無‧
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-02-25 13:45:33 IP:60.248.xxx.xxx 訂閱
呵,我有注意到您的條件式,請您再注意一下,我是寫 > 2 ,而  pedro 前輩是 >=2 
您的問題是 大於 2 ,不過分數不是重點,確定是您要的結果即可~~!

===================引 用 jtain 文 章===================
可以了,謝謝啦!
因為 careychen 大大地方法所取得的筆數會比 pedro 大大得到的少很多,
大概是我修改成我的資料時出錯,所以得分給 pedro 了。
------
價值的展現,來自於你用哪一個角度來看待它!!
pedro
尊榮會員


發表:152
回覆:1177
積分:865
註冊:2002-06-12

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-02-25 14:12:38 IP:60.248.xxx.xxx 未訂閱
其實careychen兄的語法比較簡潔,忘了有這樣的語法
Select mtype, Count(mtype) times
from @work
Group by mtype
Having Count(mtype) >= 2
order by Count(mtype) desc
jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-02-27 15:24:53 IP:211.21.xxx.xxx 訂閱
啊!不好意思,是我沒注意到我沒寫清楚。
但是我實務上還是使用您的方法
請原諒我因為臨時被抓來寫程式,時間只有2周非常趕,所以,沒有太多的精力來處理額外的事物。
幸好,有了大家的幫忙,總算告一段落了。目前就等待測試報告了。

===================引 用 careychen 文 章===================
呵,我有注意到您的條件式,請您再注意一下,我是寫 > 2 ,而 pedro 前輩是 >=2
您的問題是 大於 2 ,不過分數不是重點,確定是您要的結果即可~~!
------
無所不在
系統時間:2017-10-23 12:22:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!