2013-02-17 48 views
2

假設在表A中,我有很多行,列值爲a,b,c,d。獲取相同查詢限制的行數和行數的總數

其中,我想要10行的列值爲'c',同時還要計算列值爲'c'的行的總數。

我想:

select count(*),* from A where column like 'c'; (without limit) 

select count(*),* from A where column like 'c' limit 10; 

這甚至可能嗎?或者我將不得不解僱兩個查詢。

+0

您可以使用'union'但爲什麼不簡單地運行兩個查詢。 – 2013-02-17 16:53:21

+0

會觸發2個查詢比一個查詢更好? – 2013-02-17 16:57:24

+0

取決於您的申請。兩個查詢可能會導致競爭條件風險(如果兩者之間發生某些變化,這兩個結果可能會有所不同)。但在你的問題中,我沒有看到'c'行(沒有其他約束或排序)以及總數同時獲得的興趣。 – 2013-02-17 17:02:01

回答

1
SELECT n.*, AA.cnt 
FROM nei_product_background_category c 
    INNER JOIN nei_backgrounds n ON n.background_id = c.background_id 
    INNER JOIN ( 
     SELECT cc.product_id, COUNT(*) AS cnt 
     FROM nei_product_background_category cc 
        INNER JOIN nei_backgrounds nn ON nn.background_id = cc.background_id 
     GROUP BY cc.product_id 
    ) AA ON c.product_id = AA.product_id 
WHERE 
    c.product_id = 578 
LIMIT 10 
+0

給我一個錯誤。 「錯誤1064(42000):您的SQL語法錯誤;查看與您的MySQL服務器版本相對應的手冊,以找到正確的語法,以便在'SELECT nei_backgrounds。*,AA.cnt INNER JOIN(SELECT background_id,COUNT( *)AS'位於第1" 行 – 2013-02-17 16:48:29

+0

將烏約腦海發佈完整查詢你的問題嗎? – Sebas 2013-02-17 16:49:20

+0

選擇nei_backgrounds。*,AA.cnt FROM nei_backgrounds INNER JOIN( SELECT background_id,COUNT(*)AS'cnt' FROM nei_backgrounds WHERE background_id在 GROUP BY background_id )AA ON nei_backgrounds.column = AA.column (從nei_product_background_category其中PRODUCT_ID = 578選擇background_id)WHERE nei_backgrounds.column(從nei_pro選擇background_id duct_background_category其中的product_id = 578) LIMIT 10 – 2013-02-17 16:56:47