我有一个结构如下的表
╔════════╦══════════╦════════════╗
║ 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)),但这似乎不像我想的那样工作。我真的很震惊,这是一个重大的性能问题。任何帮助深表感谢。提前谢谢。
答案 0 :(得分:1)
您可以尝试这样:
SELECT app_id
FROM myTable
GROUP BY app_id
HAVING COUNT(distinct app_id) < 200;
答案 1 :(得分: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。
答案 2 :(得分:-1)
使用限制它将仅返回前200个结果。
SELECT DISTINCT ap_id FROM appTable LIMIT 200
然后如果您需要获得下一个200,那么使用偏移200,它将从第201行开始
SELECT DISTINCT ap_id FROM ap_Table LIMIT 200 OFFSET 200