Php Mysql连接两个查询

Php Mysql连接两个查询,php,mysql,sql,Php,Mysql,Sql,我有两个问题: SELECT opr, COUNT(*) FROM table WHERE field = 'YES' GROUP BY opr SELECT opr, MAX(category) FROM table WHERE field = 'NO' GROUP BY opr 因此,基本上在第一个查询中,我得到的是用户进行的事务数。 在第二个查询中,我得到了一个所有这些事务都属于的类别。我不想为他们所做的每一笔交易获取所有类别,只想获取类别字段的最大值,这样每个操作员就有一个条目 到目

我有两个问题:

SELECT opr, COUNT(*) FROM table WHERE field = 'YES' GROUP BY opr

SELECT opr, MAX(category) FROM table WHERE field = 'NO' GROUP BY opr
因此,基本上在第一个查询中,我得到的是用户进行的事务数。 在第二个查询中,我得到了一个所有这些事务都属于的类别。我不想为他们所做的每一笔交易获取所有类别,只想获取类别字段的最大值,这样每个操作员就有一个条目

到目前为止,我一直在单独的数组中捕获两个结果集,并在两个数组中循环以获得完整的opr->picks->category

这并不总是有效的,因为它有时会将错误的类别与错误的操作员关联

有没有办法把这两个查询合并成一个,这样我就可以得到操作符和picks,然后是MAX(category)?问题在于字段列中每个查询的条件都不同。

只需将其添加到:

SELECT opr, 
       COUNT(CASE WHEN field = 'YES' THEN 1 END) AS number_of_transactions,
       MAX(CASE WHEN field = 'NO' THEN category END) AS category
FROM table 
GROUP BY opr ;
SELECT opr,count(*), MAX(category) FROM table WHERE field = 'YES' GROUP BY opr
您还可以使用以下命令将其从2个查询删除到1个查询:

SELECT opr,count(*), MAX(category), field FROM table GROUP BY opr, field

通过使用
CASE

SELECT opr, COUNT(CASE WHEN `field` = 'YES' THEN opr END) as `count`, 
MAX(CASE WHEN `field` = 'NO' THEN category END) as `max`
FROM table   GROUP BY opr

在处理器上更快地使用总和布尔:

select 
opr, 
sum(field='yes') as transactions, 
max(if(field='no',category, null)) as category
from table 
group by opr

有了这个答案,我相信你能为我找到答案。非常棒,非常感谢。感谢所有发帖子的人。@ypercube在发帖时秒数很重要:)