線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:795
推到 Plurk!
推到 Facebook!

請教group by 問題

尚未結案
mirage
初階會員


發表:40
回覆:101
積分:28
註冊:2004-01-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-08 13:11:21 IP:211.76.xxx.xxx 未訂閱
db1資料: k1 k2 k3 k4 k5 -------------------------------- a01 連強 v8088 500 1000 <=相同 * a02 連強 v8088 500 1000 <=相同 a03 連強 v8088 600 1000 a04 捷元 v8088 500 1000 <=相同 * a05 捷元 v8088 500 1000 <=相同 a06 捷元 v8088 600 900 a07 捷元 8210 500 1000 <=相同 * a08 上捷 v8088 500 1000 <=相同 * a09 上捷 v8088 600 900 a10 連強 8210 500 1000 <=相同 * a11 連強 8210 500 900 a12 連強 8210 600 1000 a13 大強 8210 600 1000 … … -------------------------------- edit1.text:=’500’ edit2.text:=’1000’ With SQLQuery1 do begin Close; SQL.Clear; SQL.Add('select * from db1'); SQL.Add('Where k4=' Quotedstr(edit1.text)); SQL.Add('and k5=' Quotedstr(edit2.text)); SQL.Add('group by ?????????'); Open; end; 請問先進要如何寫,dbgrid 只顯示: a01 連強 v8088 500 1000 <=相同 * a04 捷元 v8088 500 1000 <=相同 * a07 捷元 8210 500 1000 <=相同 * a08 上捷 v8088 500 1000 <=相同 * a10 連強 8210 500 1000 <=相同 * 共 5 筆資料
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-08 16:24:02 IP:61.64.xxx.xxx 未訂閱
mirage, 您好    group by 是用在挑群組需搭配select的欄位數(function不在此限),所以不應是透過group by 來做,而是distinct吧。還有K1為紀錄的編號應該可以不用去考慮才是。所以,我想應該是要如此下條件才是 
select distinct K2, K3, K4, K5 from db1 where K4='500' and K5='1000'  
distinct是用來顯示不重複的資料,所以若把K1也考慮進來則會不符合你要的需求。這是我的愚見,或許有其他作法也不一定 ^^ 以上提供你參考,希望多少對你有些幫助。 我也正在努力學習中 ^ ^ 發表人 - adonis 於 2004/08/08 16:25:27 發表人 - adonis 於 2004/08/08 16:32:43
------
我也在努力學習中,若有錯謬請見諒。
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-09 08:07:42 IP:61.221.xxx.xxx 未訂閱
mirage 你好: 因為你預定為 * 所以資料庫無法回應你所要 group by 的值 因此有些動作還是不可避免的,那就是認命一個資料欄位接著一個 key 吧!! 願 Delphi 之神,眷顧你,祝福你!!
------
======================
昏睡~
不昏睡~
不由昏睡~
shinhrn
中階會員


發表:54
回覆:165
積分:83
註冊:2002-06-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-09 14:01:54 IP:218.170.xxx.xxx 未訂閱
這樣嗎? SQL.Add('select max(k1),k2,k3,max(k4),max(k5) from db1'); SQL.Add('Where k4=' Quotedstr(edit1.text)); SQL.Add('and k5=' Quotedstr(edit2.text)); SQL.Add('group by k2,k3');
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-09 16:04:34 IP:203.95.xxx.xxx 未訂閱
Hi, 稍微修正一下 shinhrn 兄的 sql command, 應該這麼下, select min(k1),k2,k3,min(k4),min(k5) from db1 Where k4=500 and k5=1000 group by k2,k3 order by 1 若資料庫支援 sub query 的話, 也可以這樣下, select * from db1 where k1 in (select min(k1) from db1 where k4=500 and k5=1000 group by k2, k3) 發表人 - timhuang 於 2004/08/09 16:05:49
mirage
初階會員


發表:40
回覆:101
積分:28
註冊:2004-01-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-11 13:02:35 IP:220.130.xxx.xxx 未訂閱
引言: Hi, 稍微修正一下 shinhrn 兄的 sql command, 應該這麼下, select min(k1),k2,k3,min(k4),min(k5) from db1 Where k4=500 and k5=1000 group by k2,k3 order by 1 若資料庫支援 sub query 的話, 也可以這樣下, select * from db1 where k1 in (select min(k1) from db1 where k4=500 and k5=1000 group by k2, k3) 發表人 - timhuang 於 2004/08/09 16:05:49
我是用mysql 4.04 , 實際程式是要比對約120個欄位,主要是 k2 及 k3 要過濾重複的. 請問有沒有更簡潔的寫法? k1 k2 k3 k4 k5 a01 連強 v8088 500 1000 <=相同 * a04 捷元 v8088 500 1000 <=相同 * a07 捷元 8210 500 1000 <=相同 * a08 上捷 v8088 500 1000 <=相同 * a10 連強 8210 500 1000 <=相同 *
系統時間:2024-09-09 14:02:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!