簡體   English   中英

MySQL限制與分組依據

[英]Mysql limit with Group by

我有三個表:

  1. 類別
  2. 商務
  3. business_category(具有字段,id,category_id,buisness_id)

一類屬於許多業務
一個企業可以有多個類別

現在,我正在嘗試執行此操作,並且希望獲得以下結果:

Category 1

buisenn 1
buisness 2
buisnesss 3


Category 2

business 1  for cat2
business 2 for cat 2
business 3 for cat 2

我只想為每個類別顯示三個業務。

這是我嘗試的查詢:

SELECT  `category`.`name` AS `category_name`,
        `category`.`id` AS category_id,
        `business`.`avg_service_price` AS avg_price,
        `business`.`name` AS `business_name`,
        `business`.`address`,
        `business`.`address2`,
        `business`.`city`,
        `business`.`state`,
        `business`.`zipcode`,
        `business`.`id` AS `business_id`,
        `business`.`lat`,`business`.`lon` 
    FROM `business_category`
    LEFT JOIN `business`
        ON `business_category`.`business_id` = `business`.`id` 
    LEFT JOIN `category`
        ON  `business_category`.`category_id` = `category`.`id`
    GROUP BY `business`.`id`
    LIMIT 0,3

它僅顯示3個結果。

誰能給我個主意?

謝謝

你不能這樣做。 Limit僅用於獲取查詢的3行,而您想要的是獲取所有結果,但每個類別僅包含3個元素。

一種解決方案是,首先獲取所有類別,然后為每個類別創建一個限制為3的查詢。另一個解決方案是獲取所有結果,然后刪除不需要的結果。

第一種解決方案比較慢,但是第二種需要更多的內存。

您需要等效於“ groupwise max”。 請參閱我的博客 ,其中包含以下示例:

SELECT
    province, n, city, population
FROM
  ( SELECT  @prev := '', @n := 0 ) init
JOIN
  ( SELECT  @n := if(province != @prev, 1, @n + 1) AS n,
            @prev := province,
            province, city, population
        FROM  Canada
        ORDER BY
            province   ASC,
            population DESC
  ) x
WHERE  n <= 3
ORDER BY  province, n;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM