2015-10-21 30 views
1

的數我有一個表,其結構如下取名稱時不同的名稱小於200的MySQL

╔════════╦══════════╦════════════╗ 
║ app_id ║ app_name ║ categoryId ║ 
╠════════╬══════════╬════════════╣ 
║ 1200 ║ A  ║  B  ║ 
║ 1200 ║ A  ║  C  ║ 
║ 1200 ║ A  ║  D  ║ 
║ 1201 ║ E  ║  F  ║ 
║ 1201 ║ E  ║  G  ║ 
╚════════╩══════════╩════════════╝ 

現在我有1600點這樣的數據。我試圖得到的是一個查詢來獲取數據,直到不同appid的數量達到200.達到200後,它不應該獲取其餘的數據。我試過count(distinct(app_id)),但這似乎並不按我想的方式工作。我非常震驚,這是一個主要的性能問題。任何幫助深表感謝。提前致謝。

回答

1

你可以嘗試這樣的:

SELECT app_id 
FROM myTable 
GROUP BY app_id 
HAVING COUNT(distinct app_id) < 200; 
+0

'COUNT(DISTINCT APP_ID)'始終是1,因爲查詢執行'GROUP BY app_id'。因此,這個查詢只是獲取表中包含的所有'app_id'值。 –

+1

謝謝拉胡爾,像一個魅力工作。我稍微修改了查詢以滿足我的要求,並且它的工作非常完美。非常感謝:) –

+0

@SathiyaNarayanan我看不出這個查詢可能如何工作。 'HAVING'子句中的'COUNT(distinct app_id)'總是'1'。如果我錯了,請糾正我。 –

-1

使用限制只會返回前200個結果。

SELECT DISTINCT ap_id FROM appTable LIMIT 200

,然後如果你需要得到下一個200,然後使用偏移200將與排發車201

SELECT DISTINCT ap_id FROM ap_Table LIMIT 200 OFFSET 200 
1

如果你想要的是

查詢到取數據直到不同appid的數量達到200

然後可以使用變量來實現這一點:

SELECT app_id, app_name, categoryId 
FROM (
    SELECT app_id, app_name, categoryId, 
     @appIDcnt := IF (@appID = app_id, 
          IF(@appID := app_id, @appIDcnt, @appIDcnt), 
          IF(@appID := app_id, @appIDcnt+1, @appIDcnt+1)) AS cnt 
    FROM mytable 
    CROSS JOIN (SELECT @appID := 0, @appIDcnt := 0) AS vars 
    ORDER BY app_id) AS t 
WHERE t.cnt <= 200 

在上述查詢@appIDcnt變量用於計數不同app_id值。所述查詢表讀取數據直到@appIDcnt值達到200

Demo here