我有以下查询:
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
组)
我尝试在查询上放置一个LIMIT 10但是它只返回10行 - 我希望每组最多返回10行。有没有办法做到这一点?
我还希望为每个关键字/城市/出价返回出价的位置。我尝试使用以下查询:
SELECT `idBUSINESS`, `KEYWORD_TEXT`, `CITY`, `BID_AMOUNT`, @rn:=@rn+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 :(得分: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