我有两个问题:
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->类别。
这并不总是有效,它有时会将错误的类别与错误的操作符相关联。
有没有办法将这两个查询合并为一个,以便我得到运算符和选择,然后是MAX(类别)?问题是每个查询的条件在字段列上是不同的。
答案 0 :(得分:1)
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 ;
答案 1 :(得分:1)
使用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
答案 2 :(得分:0)
只需将其添加到:
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
答案 3 :(得分:0)
处理器上的速度更快,使用sum bool:
select
opr,
sum(field='yes') as transactions,
max(if(field='no',category, null)) as category
from table
group by opr