группировать по одному столбцу, где несколько условий используют один и тот же ввод столбца

#php #mysql

#php #mysql

Вопрос:

у меня есть таблица с именем temp. столбцы — это идентификатор, номер телефона, короткий код, горячая клавиша.

 id  telco  shortcode hotkey
1    asdf    123      ib
2    gra     123      sb
3    cc      123      sb
4    bl      123      ibb
  

используя запрос mysql, я хочу, чтобы количество выходных данных (короткий код) группировалось по telco, где горячая клавиша ib короткий код 123 и
количество (короткий код) групп по telco, где горячая клавиша sb короткий код 123

 telco   ib         sb 
asdf     1         0
gra      0         1
cc       0         1
bl       1         0 
  

если я использую следующий запрос

 SELECT COUNT(`shortcode`) WHERE `hotkey` = 'ib' AND `shortcode` = 123
SELECT COUNT(`shortcode`) WHERE `hotkey` = 'sb' AND `shortcode` = 123   
  

тогда я выхожу следующим образом

 telco   ib          

asdf     1         
gra      0         
cc       0         
bl       1     

telco   sb

asdf     1         
gra      0         
cc       0         
bl       1  
  

но я не хочу этого

Ответ №1:

вы хотите использовать случай суммы, например

  Select
      Telco,
       Sum  (   Case when hotkey = 'ib' then 1 else 0 end) as ib,
       Sum  (   Case when hotkey = 'sb' then 1 else 0 end) as sb
From 
      Yourtable 
 Group By
   Telco
  

Обратите внимание, что в текущих версиях Oracle Sql server есть возможность использовать синтаксис pivot

Комментарии:

1. Я написал «Theb», когда должен был написать «тогда». Я исправил это, но ошибка, которую вы получаете, странная. Я не уверен, что может вызвать это. Возможно, вам следует убедиться, что все экранировано, и начать только с одного оператора SUM / Case

2. Рад, что смог помочь. Возможно, вы захотите ознакомиться с этим мета-сообщением. Это объясняет преимущества маркировки принятого ответа. meta.stackexchange.com/questions/5234 /…

Ответ №2:

У вас это уже есть, просто нужно добавить SELECT и не беспокоиться о ГРУППЕ ПО частям.

 SELECT COUNT(`shortcode`) WHERE `hotkey` = 'ib' AND `shortcode` = 123
SELECT COUNT(`shortcode`) WHERE `hotkey` = 'sb' AND `shortcode` = 123
  

Первый покажет вам, сколько строк имеют горячую клавишу как ‘ib’ и короткий код как 123, второй с горячей клавишей как ‘sb’ и коротким кодом как 123.

Комментарии:

1. я это знаю, но как показать вывод моего требуемого формата. я хочу написать запрос mysql, который выдает вывод в указанном выше формате

2. Возможно, вы захотите уточнить это в вопросе. Вместо COUNT (shortcode) вы можете изменить его на выбор telco вместо этого, а затем просто перебирать и отображать для каждого запроса.

3. отображать каждый запрос, затем каждый раз показывать telco, как показано ниже telco ib asdf 1 gra 0 cc 0 bl 1 и telco sb asdf 0, gra 1, cc 1 b1 0, но я хочу показывать имя оператора только одно для каждого запроса.