SELECT COUNT()GROUP BY IN()mysql中的数据集

约翰·杜

我的桌子就像

爱表(爱)

animal_id | user_id | time
   1          1
   2          1 
   1          3
   1          5
   2          3 
   3          1 

动物表(动物)

id | type   |   name
 1     air       animal 1 
 2     ground    animal 2
 3     water     animal 3
 4     space     animal 4
 5     air       animal 5  
 6     ground    animal 6

我的查询

( select count(*) from loves where animal_id = a.animal_id) as n_l,
 a.name 
FROM animal a ,loves lp 
WHERE a.animal_id =  lp.animal_id 
  AND lp.user_id = $MYUSERID  
  AND a.type IN ($MYANIMALTYPES) 
ORDER BY lp.time DESC 
LIMIT 5

现在如果$MYUSERID = 1$MYANIMALTYPES = 'air','ground'

我应该从上面的示例中获取输出

n_l | name 
3     animal 1 
2     animal 2

但是由于某种原因,我想得到以下的组合

$MYANIMALTYPES = 'air','ground'

$MYANIMALTYPES = 'air','water'

$MYANIMALTYPES = 'space'

$MYANIMALTYPES = 'space','water

我必须分别成组运行上述查询4次$MYANIMALTYPES

我的问题是我要查询的查询太多了。有什么方法可以在一个查询中获得我想要的东西吗?

更新

为了简单理解,我如何将下面的两个查询合并为一个查询?

( select count(*) from loves where animal_id = a.animal_id) as n_l,
 a.name 
FROM animal a ,loves lp 
WHERE a.animal_id =  lp.animal_id 
  AND lp.user_id = $MYUSERID  
  AND a.type IN ('ground','air') 
ORDER BY lp.time DESC 
LIMIT 5

( select count(*) from loves where animal_id = a.animal_id) as n_l,
 a.name 
FROM animal a ,loves lp 
WHERE a.animal_id =  lp.animal_id 
  AND lp.user_id = $MYUSERID  
  AND a.type IN IN ('air','space') 
ORDER BY lp.time DESC 
LIMIT 5
亭子

您可以使用查询的这种适应方式。它将联接添加到您感兴趣的4种类型组合中:

SELECT      ( SELECT count(*)
              FROM   loves
              WHERE  animal_id = a.animal_id) as n_l,
            a.name,
            trim(concat(types.type1, ' ', types.type2)) grp
FROM        animal a 
INNER JOIN  loves lp 
         ON a.animal_id =  lp.animal_id  
INNER JOIN  ( SELECT 'air' type1, 'ground' type2
              UNION ALL
              SELECT 'air', 'water'
              UNION ALL
              SELECT 'space', ''
              UNION ALL
              SELECT 'space', 'water' ) AS types
         ON a.type IN (types.type1, types.type2)
WHERE       lp.user_id = $MYUSERID
GROUP BY    a.name,
            trim(concat(types.type1, ' ', types.type2))
ORDER BY    3, lp.time DESC 
LIMIT 15

我还设置了更高的限制,因为您现在将在一个查询中获得所有结果。

这是一个小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SELECT COUNT()GROUP BY IN()mysql中的数据集

来自分类Dev

通过MySQL显示条形图SELECT COUNT(*)GROUP BY

来自分类Dev

MySQL SELECT COUNT组

来自分类Dev

MySQL,反转SELECT GROUP BY

来自分类Dev

MySQL GROUP BY和SELECT GROUP BY

来自分类Dev

MySQL COUNT和GROUP BY

来自分类Dev

MySQL Query with count, group by

来自分类Dev

R等效于SQL SELECT COUNT(*)... GROUP BY

来自分类Dev

SQL SELECT COUNT GROUP BY-错误

来自分类Dev

SQL SELECT COUNT GROUP BY-错误

来自分类Dev

MySQL SELECT Count语句问题

来自分类Dev

MySQL COUNT与SELECT行的性能

来自分类Dev

组合group by和count mysql

来自分类Dev

基于mySQL中的COUNT()值限制GROUP BY

来自分类Dev

使用GROUP BY的子查询中的MySQL COUNT

来自分类Dev

MySQL查询的联接表中的GROUP BY,COUNT()

来自分类Dev

SELECT CASE SQL 中的 Group BY

来自分类Dev

JPA JPQL:使用COUNT,GROUP BY和ORDER BY选择SELECT NEW

来自分类Dev

使用带有多个GROUP BY的count(*)的SQL SELECT请求

来自分类Dev

使用带有多个GROUP BY的count(*)的SQL SELECT请求

来自分类Dev

SELECT funcionario.name WHERE COUNT() > AVG() GROUP BY funcionario

来自分类Dev

核心数据中的SELECT COUNT(DISTINCT ZUSER)

来自分类Dev

从MySQL中的2个表中进行SELECT COUNT

来自分类Dev

MySql SELECT GROUP_CONCAT查询不会在长文本单元格中返回所有数据

来自分类Dev

How to use SELECT inside COUNT in MYSQL

来自分类Dev

MySQL SELECT from two tables with COUNT

来自分类Dev

如何在MYSQL的COUNT内部使用SELECT

来自分类Dev

MySQL查询挂在`SELECT COUNT(*)`上

来自分类Dev

MySQL的SELECT和COUNT速度查询