数据库
首页 > 数据库> > mysql-关于最大值的内部联接表

mysql-关于最大值的内部联接表

作者:互联网

我试图编写一个MySQL查询,在其中提取卖方的信息和她最受欢迎的产品.这取决于浏览量最多的产品,即MAX(page_views).

不过,以下查询只是拉出一种随机产品,而不是浏览量最多的产品.

"SELECT 
     seller.id, seller.language, seller.shop_name,seller.story, 
     seller.eng_story, product.id, product.image_thumb, product.title, 
     product.eng_title, product.price, MAX(product.page_views) 
  FROM seller 
     INNER JOIN product ON seller.id=product.seller_id 
  WHERE seller.handpicked='y' AND seller.shop_active='y' 
  GROUP BY seller.id 
  ORDER BY product.page_views
  LIMIT 0,5"

或更准确地说,page_views实际上是正确的数字,但是如何获得其他产品字段(id,图片,标题等),以使其具有最多的页面浏览量.

表数据:

卖家:

id | language | shop_Name | story     | eng_story   | handpicked | active
1  |   1      | mitienda  | hola mundo| Hello world | Y          | Y
2  |   1      | sisenor   | bonita    | beautiful   | N          | Y
3  |   2      | new_world | mi vida   | my life     | Y          | Y

产品:

id | seller_id | image_thumb | title    | eng_title | price | page Views
1  |  1        | /images/..  | sombrero | hat       | $5    | 10
2  |  1        | /images/..  | bufanda  | scarf     | $25   | 30
3  |  2        | /images/..  | arte     | art       | $15   | 15
4  |  3        | /images/..  | joyeria  | jewlery   | $10   | 1
5  |  2        | /images/..  | canasta  | basket    | $21   | 13
6  |  3        | /images/..  | ropa     | clothes   | $13   | 6

预期结果(精简):

seller.id | shop_name | product.id | pageviews | title    | price
  1       |  miteinda |     2      |    30     |  bufanda | $25
  3       |  newworld |     6      |     6     |  ropa    | $13

结果应按浏览量列出经过手工挑选的卖家信息及其最受欢迎的产品.按浏览量对卖家进行排序,总共限制为5个卖家.

解决方法:

SELECT  a.ID SellerID,
        a.Shop_Name,
        b.ID ProductID,
        b.pageViews,
        b.title,
        b.Price
FROM    seller a
        INNER JOIN Products b
            ON a.id = b.seller_ID
        INNER JOIN
        (
            SELECT  seller_ID, MAX(pageViews) max_view
            FROM    products
            GROUP   BY seller_ID
        ) c ON  b.seller_ID = c.seller_ID AND
                b.pageViews = c.max_View
WHERE   a.handpicked = 'Y' AND a.active = 'Y'

> SQLFiddle Demo

OUTPUT

╔══════════╦═══════════╦═══════════╦═══════════╦═════════╦═══════╗
║ SELLERID ║ SHOP_NAME ║ PRODUCTID ║ PAGEVIEWS ║  TITLE  ║ PRICE ║
╠══════════╬═══════════╬═══════════╬═══════════╬═════════╬═══════╣
║        1 ║ mitienda  ║         2 ║        30 ║ bufanda ║ $25   ║
║        3 ║ new_world ║         6 ║         6 ║ ropa    ║ $13   ║
╚══════════╩═══════════╩═══════════╩═══════════╩═════════╩═══════╝

标签:sql,mysql,select,greatest-n-per-group
来源: https://codeday.me/bug/20191010/1888251.html