0

我有两个疑问:

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。

这并不总是有效,它有时会将错误的类别与错误的运算符相关联。

有没有办法将这两个查询合并为一个,以便我得到运算符和选择,然后是 MAX(类别)?问题是每个查询的条件在字段列上是不同的。

4

4 回答 4

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 ;
于 2013-10-11T14:47:35.537 回答
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
于 2013-10-11T14:48:28.800 回答
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
于 2013-10-11T14:47:46.747 回答
0

在处理器上更快,使用 sum bool:

select 
opr, 
sum(field='yes') as transactions, 
max(if(field='no',category, null)) as category
from table 
group by opr
于 2013-10-11T14:52:38.310 回答