简体   繁体   English

MySQL查询中每个组的行数

[英]Row Count per Group in mySQL Query

I have the following query: 我有以下查询:

    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

I want it to return top 10 bids for every keyword / city group (for every ebq1. KEYWORD_TEXT , ebq1. CITY , ebq1. BID_AMOUNT group) 我想它返回前10名的出价为每个关键字/城市群(每一个ebq1。 KEYWORD_TEXT ,ebq1。 CITY ,ebq1。 BID_AMOUNT组)

I tried putting a LIMIT 10 on the query but then it just returns 10 rows - I want a maximum of 10 rows returned per group. 我尝试在查询上放置一个LIMIT 10,但是它只返回10行-我希望每个组最多返回10行。 Is there a way to do this? 有没有办法做到这一点?

I also want the position of the bid returned for every keyword / city / bid. 我还希望针对每个关键字/城市/出价返回出价的位置。 I tried using the following query: 我尝试使用以下查询:

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;

but it gives me positions from 1 to 10 ignoring my group. 但是忽略了我的团队,我的排名从1上升到10。 I want the position returned for each group (top 10 bids in each city and keyword.). 我希望为每个组返回排名(每个城市和关键字的前10个出价)。

This query returns the following: 该查询返回以下内容:

# 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'

I want it to return: 我希望它返回:

# 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'

Try this 尝试这个

 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM