За последние 24 часа нас посетили 35057 программистов и 1747 роботов. Сейчас ищут 804 программиста ...

Сгруппировать 2 столбца, и кол-во их по столбцам

Тема в разделе "MySQL", создана пользователем Daulet, 15 сен 2014.

  1. Daulet

    Daulet Активный пользователь

    С нами с:
    14 авг 2014
    Сообщения:
    49
    Симпатии:
    1
    Здравствуйте, как можно сгруппировать и вывести кол-во их как на рисунке
    это код для отдельно результата, мне нужно объединить 2 запроса
    Код (Text):
    1. SELECT cell,count(cell) FROM document where cell>0 GROUP BY cell
    Код (Text):
    1. SELECT old,count(old) FROM document where old>0 GROUP BY old
    [​IMG]
     
  2. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Навскидку, без проверки
    Код (Text):
    1.  
    2. select tab.val, count(d1.*), count(d2.*)
    3. from (select if(cell>0, cell, old) val from document) tab,
    4. document d1, document d2
    5. where d1.cell=tab.val and d2.old = tab.val
    6. group by tab.val
     
  3. Daulet

    Daulet Активный пользователь

    С нами с:
    14 авг 2014
    Сообщения:
    49
    Симпатии:
    1
    Хыиуду, ошибка выходить

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) from (select if(cell_id>0, cell, old) val from document) tab, docu' at line 1

    хотя если убрать count(d1.*), count(d2.*), тогда результат только
    • val - название столбца
      52
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Тестируем тут. Или так:
    Код (PHP):
    1. SELECT 
    2.   CASE WHEN `old` > 0 THEN `old` ELSE `cell` END AS `cell-old`,
    3.   SUM(CASE WHEN `cell` > 0 THEN 1 ELSE 0 END) AS `cntCell`,
    4.   SUM(CASE WHEN `old` > 0 THEN 1 ELSE 0 END) AS `cntOld`
    5. FROM 
    6.   `document`
    7. GROUP BY `cell-old` 
    Или то же самое с помощью IF:
    Код (PHP):
    1. SELECT IF(`old` > 0, `old`, `cell`) AS `cell-old`,
    2.   SUM(IF(`cell` > 0, 1, 0)) AS `cntCell`,
    3.   SUM(IF(`old` > 0, 1, 0)) AS `cntOld`
    4. FROM 
    5.   `document`
    6. GROUP BY `cell-old` 
     
  5. Daulet

    Daulet Активный пользователь

    С нами с:
    14 авг 2014
    Сообщения:
    49
    Симпатии:
    1
    Deonis, спасибо Вам, завтра на своем базе протестирую, по ссылке работает
    Спасибо за ссылку (Тестируем тут)
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    cell, old могут быть отрицательными?
    cell, old могут быть ненулевыми в одной строке?
     
  7. Daulet

    Daulet Активный пользователь

    С нами с:
    14 авг 2014
    Сообщения:
    49
    Симпатии:
    1
    Deonis, протестировал, работает, еще раз спасибо!!!
    runcore, в моем случае cell, lod они >=0, и cell или old больше нуля.