Mysql совет подзапроса - PullRequest
       6

Mysql совет подзапроса

0 голосов
/ 26 апреля 2020

Надеясь, что кто-то может посоветовать подзапрос, который я пытаюсь сделать. Я все еще пытаюсь разобраться с подзапросами.

Вот запрос, который я пытаюсь выполнить:

SELECT name (SELECT type AS User, count(*) As Number 
              from table 1 
              where event = 'answerall'
            ) from table 2

Выполнение обоих запросов самостоятельно работает нормально, но может ' чтобы они не работали вместе.

Я хочу получить содержимое имени столбца таблицы 2 и добавить его в таблицу 1.

Так что у меня такой запрос:

Name  User  Number
Jimmy  7001    7

Извинения, которые я пытался:

SELECT 
    name,
    (SELECT 
            type AS Agent, COUNT(*) AS Number
        FROM
            queue_log
        WHERE
            event = 'OUTANSWER')
FROM
    agents_conf

и получаю ошибку «Операнд должен содержать 1 столбец (и)»

таблица queue_log и agents_conf не связаны друг с другом но находятся в той же базе данных

Пример таблицы queue_log

uid  -  type        -  event
1    - Agent6001    - OUTANSWER
2    - Agent6002    - CONNECT
3    - Agent6001    - ABANDON 
4    - Agent5003    - OUTANSWER

Выполнение этого запроса прекрасно работает здесь:

SELECT type AS Agent, count(*) As Number from queue_log where event = 'OUTANSWER'

Таблица Agent.conf:

agent_number   - name   
6001           - Jim    
6002           - James       
6003           - John    

Выполнение этого запроса работает нормально и предоставляет мне список всех имен

SELECT name from agents_conf

1 Ответ

0 голосов
/ 26 апреля 2020

Добро пожаловать в S / O, несмотря на то, что вы, кажется, получаете ранний удар ... хотя не переживайте. В будущем попробуйте объяснить простым языком Engli sh, что вы пытаетесь получить, а затем покажите структуры вспомогательных таблиц и образцы данных соответствующих таблиц.

Теперь, похоже, вы пытаетесь получить счет из файла журнала, основанный на данном событии (в данном случае «OUTANSWER»), основанный на каждом типе. Тип на самом деле представляет пользователя (звучит очень странно). Затем мне нужно имя человека для каждого из типов (пользователь). - Или, по крайней мере, что-то вроде этого, а теперь по вашему запросу.

По одному. Вы несколько представили, но изменили событие, используя ссылки таблицы 1 и таблицы 2, которые не соответствуют предоставленным вами образцам.

Что касается данных, у вас есть таблица queue_log с префиксом типа all (в этом примере набора) с «агентом». Это действительно точно? Потому что тогда в вашей таблице агентов у вас просто есть видимый ключ "ID" на основе целых чисел. Если это случай объединения, оно не будет работать хорошо, если вы попытаетесь сравнить целое число со строкой, которую вы должны удалить префикс «Агент», и есть ли другие префиксы для других целей?

Итак, учитывая все эти вещи, которые, я надеюсь, вы сможете дать разъяснения, я постараюсь помочь. Во-первых, подсчет каждого агента для данной вещи ... В этом случае я собираюсь предварительно вырезать «Агент» из строки поля типа, если это действительно префикс для агента.

select
      replace( ql.type, 'Agent', '' ) AgentID,
      count(*) AgentCount
   from
      queue_log ql
   where
      ql.Event = 'OUTANSWER'
   group by
      replace( ql.type, 'Agent', '' ) AgentID

Это вернет 2 строки. Один для каждой записи Outanswer для разных соответствующих агентов, но при аренде столбец AgentID будет только 6001 и 5003 соответственно, но все равно будет строкой. Теперь вы хотите получить имя человека, поэтому вам нужно присоединиться к таблице агентов. Итак, я сделаю вышеуказанный запрос в качестве основного выбора и назначу ему псевдоним, чтобы его можно было присоединить к таблице агентов, чтобы получить имя

select
      PreQuery.AgentID,
      PreQuery.AgentCount,
      a.Name
   from
      (select
            replace( ql.type, 'Agent', '' ) AgentID,
            count(*) AgentCount
         from
            queue_log ql
         where
            ql.Event = 'OUTANSWER'
         group by
            replace( ql.type, 'Agent', '' )) PreQuery
      JOIN Agent a
         on PreQuery.AgentID = a.agent_number

Теперь, если ваш queue_log имеет префикс Agent + ID, я бы настоятельно рекомендовал разбить его на два столбца, например

QueueID   KeySource  KeyID   Event
1         Agent      6001    OUTANSWER
2         Agent      6002    CONNECT
3         Agent      6001    ABANDON
4         Agent      5003    OUTANSWER

Таким образом, вы можете сохранить KeyID в виде целого числа, а источник идентифицирует, откуда он исходит. В будущем это станет намного проще ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...