首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP和Mysql,避免多次循环查询。

问PHP和Mysql,避免多次循环查询。
EN

Stack Overflow用户
提问于 2019-06-21 11:36:44
回答 1查看 119关注 0票数 0

我有一张桌子myTable,看起来像这样:

代码语言:javascript
复制
+-------+-------+--------+------------+
| 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页面上的方法是先查询以下内容:

代码语言:javascript
复制
SELECT date, Agent, count(*) as tot
     FROM myTable
     WHERE date between d1 and d2
     group by date, agent

当循环每个代理和日期的结果时,我查询:

代码语言:javascript
复制
SELECT count(*) as totQ1 FROM my table WHERE date='somedate' and agent='someagent' and qualif='Q1'

“2019-05-11”至“2019-05-12”期间的预期结果

代码语言:javascript
复制
+------------+--------+-----+-----------+
|   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;

有没有办法将所有这些都合并成一个查询,这样就不必对每个日期和代理进行多次查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-21 12:15:42

您可以使用条件SUM(),如下所示:

代码语言:javascript
复制
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, agent
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56702699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档