PHP и Mysql, избегайте многократных запросов - PullRequest
0 голосов
/ 21 июня 2019

У меня есть таблица 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 (строки) -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;

Можно ли как-нибудь объединить все это в один запрос, чтобы мне не приходилось запрашивать несколько раз для каждой даты и агента?

1 Ответ

0 голосов
/ 21 июня 2019

Вы можете использовать условное 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, agent
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...