通过mysql订购后创建一个唯一的列值

所以,我的问题是,我有一个客户名单(现在有大约10万条记录),每个客户都有收入。当我按国家进行分组时,我可以获得大约60个国家的收入总和。比我更需要通过收入DESC来订购吧,我的查询看起来是这样的:通过mysql订购后创建一个唯一的列值

SELECT s2.i,s1.year,s1.short_c,s1.country,s1.uges FROM 

(SELECT u.year,k.short_c,s.country, IFNULL(ROUND(SUM(u.income)),0) as uges

FROM im_income u,im_contact k,td_countries s

WHERE u.year=2012

AND u.customer_id=k.id

AND k.kat='K'

AND k.short_c=s.short_c

GROUP BY k.short_c, u.year

ORDER BY u.year ASC,uges DESC) s1

CROSS JOIN

(SELECT @i:[email protected]+1 as i FROM (SELECT @i:= 0) AS i) s2

而且我知道,这与CROSS JOIN是错误的,因为它不给我我需要什么,但有什么办法在ORDER BY之后创建一个唯一的ID,因为我需要订购具有收入DESC的国家,并且比给他们分配代表排名数字的ID?

结果看起来像现在这样:

+-+----+-------+---------+------+ 

|i|year|short_c|country |uges |

+-+----+-------+---------+------+

|1|2012|USA |United S.|123456|

+-+----+-------+---------+------+

|1|2012|RU |Russia |23456 |

+-+----+-------+---------+------+

而且我希望它以这种方式,而是通过独有的I值的订单后分配:

+-+----+-------+---------+------+ 

|i|year|short_c|country |uges |

+-+----+-------+---------+------+

|1|2012|USA |United S.|123456|

+-+----+-------+---------+------+

|2|2012|RU |Russia |23456 |

+-+----+-------+---------+------+

|3| | | | |

+-+----+-------+---------+------+

任何帮助,将不胜感激。

回答:

我认为这是你在找什么:

SELECT @i := @i + 1 as i, s1.year, s1.short_c, s1.country, s1.uges 

FROM (SELECT u.year,

k.short_c,

s.country,

IFNULL(ROUND(SUM(u.income)),0) as uges

FROM im_income u join

im_contact k

on u.customer_id = k.id join

td_countries s

on k.short_c = s.short_c

WHERE u.year = 2012 AND k.kat = 'K'

GROUP BY k.short_c, u.year

) s1

CROSS JOIN

(SELECT @i:= 0) const

ORDER BY year, uges desc;

当结果是“输出”,由订单后,会出现变量赋值。

我还修复了您的join语法。您应该学会在where子句中使用显式join而不是隐式联接。

以上是 通过mysql订购后创建一个唯一的列值 的全部内容, 来源链接: utcz.com/qa/266762.html

回到顶部