iT邦幫忙

0

mysql group by 之後進行次序排名

最近在做一個資料庫,但是發現了一個問題
想請各位大大看看應該怎麼解決

我有一些資料長得像這樣
https://ithelp.ithome.com.tw/upload/images/20190320/20110847YOg0b2MM4x.jpg
想利用account去分組進行cash的加總,並且根據出來的sumcash進行排名
但卻遇到一些問題
https://ithelp.ithome.com.tw/upload/images/20190320/20110847HgHcbrJg25.jpg
下面這段是我得程式碼寫法

select  @rownum := @rownum + 1 AS 'rownum',account,sum(cash) as sumcash 
from Tablea,(SELECT @rownum := 0) b
group by account order by sumcash desc;

我的rownum不是根據sumcash去排名而是根據account去排名
想請問應該如何修正此問題

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
海綿寶寶
iT邦大神 1 級 ‧ 2019-03-20 09:23:32
最佳解答

https://ithelp.ithome.com.tw/upload/images/20190320/20001787d5A4JJyN0H.png

      select @rownum := @rownum + 1 as rownum, account, sumcash
      from (
            select account, sum(cash) sumcash
            from   Tablea
            group by account
            order by sum(cash) desc
           ) t1, (select @rownum := 0) t2
看更多先前的回應...收起先前的回應...
phes11434 iT邦新手 2 級 ‧ 2019-03-20 09:30:23 檢舉

想請問一下這樣的語法跟我的語法的差別是差在哪裡?

差在 rownum 會依 sumcash 排序

phes11434 iT邦新手 2 級 ‧ 2019-03-20 09:45:33 檢舉

感謝你得回答

小魚 iT邦大師 1 級 ‧ 2019-03-20 14:07:56 檢舉

要多包一層就是了, 你沒辦法在第一層SQL做這件事.

1

要先做好group後,才去使用order。
你這樣的寫法會變成先order再做group。

語法的順序不重要,因為group如果寫在同一段的話。都會最後運行的。
所以你需要用子查尋的處理方式

SELECT * FROM (
  select  @rownum := @rownum + 1 AS 'rownum',account,sum(cash) as sumcash 
  from Tablea,(SELECT @rownum := 0) b
  group by account 
) AS sumdata
order by sumcash desc;
phes11434 iT邦新手 2 級 ‧ 2019-03-20 09:26:17 檢舉

我用你的語法跑出來結果還是一樣

我忘了 @rownum 也會被影響。要拉出來才行。
海綿寶寶已經給你正確答案了。

下次要處理跟group的東西。要先注意先處理好再做動作。
因為有group的語法。千萬要記得group的動作一定會最後處理。

我要發表回答

立即登入回答