我有一张桌子myTable,看起来像这样:
+-------+-------+--------+------------+
| Id | Agent | Qualif | Date |
+-------+-------+--------+------------+
| 1 | A | Q1 | 2019-05-11 |
| 2 | B | Q2 | 2019-05-11 |
| 3 | C | Q1 | 2019-05-12 |
| 4 | A | Q1 | 2019-05-11 |
| 5 | A | Q2 | 2019-05-11 |
+-------+-------+--------+------------+对于给定的日期范围,我需要显示每个日期、每个代理和计数(行)-count(qualif= Q1) / count (行)的行数
为了进一步解释,我在PHP页面上的方法是先查询以下内容:
SELECT date, Agent, count(*) as tot
FROM myTable
WHERE date between d1 and d2
group by date, agent当循环每个代理和日期的结果时,我查询:
SELECT count(*) as totQ1 FROM my table WHERE date='somedate' and agent='someagent' and qualif='Q1'“2019-05-11”至“2019-05-12”期间的预期结果
+------------+--------+-----+-----------+
| date | Agent | tot | division |
+------------+--------+-----+-----------+
| 2019-05-11 | A | 3 | 2/3 |
| 2019-05-11 | B | 1 | 1 |
| 2019-05-12 | C | 1 | 1 |
+------------+--------+-----+-----------+考虑到是否tot=0;
有没有办法将所有这些都合并成一个查询,这样就不必对每个日期和代理进行多次查询?
发布于 2019-06-21 12:15:42
您可以使用条件SUM(),如下所示:
SELECT
date,
Agent,
count(*) as tot,
sum(case when Qualif = 'Q1' then 1 else 0 end) / count(*) as division
FROM myTable
WHERE date between d1 and d2
GROUP BY date, agenthttps://stackoverflow.com/questions/56702699
复制相似问题