2014-02-28 96 views
0

我有以下查询:行计数在MySQL查询

SELECT ebq1.`idBUSINESS`, ebq1.`KEYWORD_TEXT`, ebq1.`CITY`, ebq1.`BID_AMOUNT` 
    FROM `elevated_business_queue` ebq1 
    GROUP BY ebq1.`KEYWORD_TEXT`, ebq1.`CITY`, ebq1.`BID_AMOUNT` 
    ORDER BY ebq1.`KEYWORD_TEXT`, ebq1.`CITY`, ebq1.`BID_AMOUNT` DESC 

我想它返回前10名的出价为每个关键字/城市群(每一个ebq1 KEYWORD_TEXT,ebq1 CITY,ebq1。 BID_AMOUNT组)

我试着在查询上放置一个限制10,但它只是返回10行 - 我想每个组最多返回10行。有没有办法做到这一点?

我也想申办的位置为每一个关键字/城市/投标返回。我尝试使用以下查询:

SELECT `idBUSINESS`, `KEYWORD_TEXT`, `CITY`, `BID_AMOUNT`, @rn:[email protected]+1 AS `POSITION` 
FROM (
    SELECT ebq1.`idBUSINESS`, ebq1.`KEYWORD_TEXT`, ebq1.`CITY`, ebq1.`BID_AMOUNT` 
    FROM `clearindia`.`elevated_business_queue` ebq1 
    GROUP BY ebq1.`KEYWORD_TEXT`, ebq1.`CITY`, ebq1.`BID_AMOUNT` 
    ORDER BY ebq1.`KEYWORD_TEXT`, ebq1.`CITY`, ebq1.`BID_AMOUNT` DESC LIMIT 10 
) t1, (SELECT @rn:=0) t2; 

但它给了我从1到10的位置忽略我的组。我希望为每个组返回一个位置(每个城市和关键字排名前10位)。

该查询返回如下:

# idBUSINESS, KEYWORD_TEXT, CITY, BID_AMOUNT, POSITION 
'5', '1', 'New York', '2.50', '1' 
'7', '1', 'New York', '2.30', '2' 
'1', '1', 'New York', '1.50', '3' 
'7', '2', 'New Jersey', '3.50', '4' 
'5', '2', 'New Jersey', '2.50', '5' 

我想它返回:

# idBUSINESS, KEYWORD_TEXT, CITY, BID_AMOUNT, POSITION 
'5', '1', 'New York', '2.50', '1' 
'7', '1', 'New York', '2.30', '2' 
'1', '1', 'New York', '1.50', '3' 
'7', '2', 'New Jersey', '3.50', '1' 
'5', '2', 'New Jersey', '2.50', '2' 
+0

我不能确定是否算作重复,但在任何情况下,看看这里:http://stackoverflow.com/questions/2026956/want-row-number-on-group-of-column-in-my-sql –

回答

1

试试这个

Select * from (
    SELECT @row_num :=  IF(@prev_value=o.CITY,@row_num+1,1) AS RowNumber 
    ,o.idBUSINESS 
    ,o.KEYWORD_TEXT 
    ,o.CITY 
, o.BID_AMOUNT 
    ,@prev_value := o.CITY 
    FROM elevated_business_queue o, 
    (SELECT @row_num := 1) x, 
    (SELECT @prev_value := '') y 
    ORDER BY o.CITY, o.BID_AMOUNT DESC) as temp_tab 
    Where 
    RowNumber <11 
+0

@amar有y我们的问题还没有解决?因为你没有选中接受的勾号 –