![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 elsa ![]()
![]() |
這兩天正在測試欄位累加的部分, 但是遇到有重複的值就會亂跳 Orz TABLE`test01` 欄位如下: +----+------+-------+ | ID | item | quota | +----+------+-------+ | 1 | A | 1 | | 2 | B | 3 | | 3 | C | 10 | | 4 | D | 10 | | 5 | E | 20 | +----+------+-------+ Google了語法後,用以下SQL去跑結果: 我期望跑出的結果是 +----+------+-------+-----+ | ID | item | quota | SUM | +----+------+-------+-----+ | 1 | A | 1 | 1 | | 2 | B | 3 | 4 | | 3 | C | 10 | 14 | | 4 | D | 10 | 24 | | 5 | E | 20 | 44 | +----+------+-------+-----+ 但實際上跑出的結果卻是: +----+------+-------+-----+ | ID | item | quota | SUM | +----+------+-------+-----+ | 1 | A | 1 | 1 | | 2 | B | 3 | 4 | | 3 | C | 10 | 24 | | 4 | D | 10 | 24 | | 5 | E | 20 | 44 | +----+------+-------+-----+ 如果 quota 欄位的值沒有重複的情況,累加的結果是正確的。 想請教各位前輩們我的語法應該修正為何,在欄位有可能重複的情況下才能跑出正確的值呢? |
1樓 |
先抓一個錯誤出來...你用兩個以上的table要設定關聯
看是要a inner join b on ... 還是直接在 where 裡面下 a.id = b.id
本篇文章回覆於2015-09-24 15:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
不錯的參考
迷路 ![]() ![]() |
因為樓主的期望和SQL的條件不符合
樓主的條件式a.quota >= b.quota ID 3和4 的quota都是10,它們SUM出來的值沒理由會不同
本篇文章回覆於2015-09-24 16:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓
作者回應
elsa ![]() |
我把SQL改成
就跑出正確結果了, 不過SQL乍看之下感覺好像還是哪裡怪怪的...(?)
本篇文章回覆於2015-09-24 17:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
4樓 |
歹事,沒注意到是要算累加值。
用a.id 也是可以 不過如果id亂跳的話就.... 最好的方法是直接做row_number..mysql好像沒這個函數 需要另外寫。
本篇文章回覆於2015-09-25 09:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓
作者回應
elsa ![]() |
我的 id 其實是 primary key 並且採用 auto_increment 的方式,應該不會有重複值發生。
請問這樣是否就可以直接用 id 呢?? 還是其實做 row_number 之類的會比較好呢??
本篇文章回覆於2015-09-25 12:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
6樓
最有價值解答
Daimom ![]() ![]() |
後來想想應該是沒有問題,我想多了。
不過要注意的應該是item,如果他也是一個連續的值 A、B、C、D、E 要按照此順序加總的話,就需要另外做row_number了。 當資料 變成 (1,'A',50),(2,'B',30),(6,'C',40),(4,'D',40),(5,'E',50),(7,'C',30) 而你又以id排序的話 出來的結果是 1 A 50 50 2 B 30 80 4 D 40 120 5 E 50 170 6 C 40 210 7 C 30 240 但用 item排序的話 則是 變成 1 A 50 50 2 B 30 80 6 C 40 210 7 C 30 240 4 D 40 120 5 E 50 170 如果沒這層顧慮的話,就放心用吧。
本篇文章回覆於2015-09-25 13:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
7樓
作者回應
elsa ![]() |
哦哦,受教了!!
非常感謝您!! 也感謝2樓的迷路前輩提點關鍵。
本篇文章回覆於2015-09-25 14:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |