2015-01-29 3 views
0

Я хочу использовать этот оператор sql как единый оператор, который приведет к 4 столбцам с разным счетом и company_id.более одного счета * sql в одном sql

select company_id,count(*) as det from feedbacks a join(select id,company_id from users ) b on a.user_id = b.id where healthi_rating < 7 group by company_id 
select company_id,count(*) as neu from feedbacks a join(select id,company_id from users ) b on a.user_id = b.id where healthi_rating <9 && healthi_rating >=7 group by company_id 
select company_id,count(*) as pro from feedbacks a join(select id,company_id from users ) b on a.user_id = b.id where healthi_rating >=9 group by company_id 

может кто-то дать мне знать, как это сделать.

+0

подзапросов должно работать нормально: 'ВЫБРАТЬ company_id, (SELECT COUNT (*) FROM обратными ... где healthi_rating <7 group by company_id) det, (SELECT COUNT (*) ОТ обратных связей ...) neu' – knittl

+0

вы можете мне сказать какой-либо другой способ сделать это? или если вы знаете по Active record –

ответ

4

Для MySQL сделать

select company_id, 
     sum(healthi_rating < 7) as det, 
     sum(healthi_rating between 7 and 8) as neu, 
     sum(healthi_rating >= 9) as pro 
from feedbacks a 
join(select id, company_id from users) b on a.user_id = b.id 
group by company_id 

и использованием ANSI SQL Standard и без подзапроса users

select b.company_id, 
     sum(case when healthi_rating < 7 then 1 else 0 end) as det, 
     sum(case when healthi_rating between 7 and 8 then 1 else 0 end) as neu, 
     sum(case when healthi_rating >=9 then 1 else 0 end) as pro 
from feedbacks a 
join users b on a.user_id = b.id 
group by b.company_id 
+0

Это решение также должно быть намного более эффективным, чем подзапросы или отдельные запросы (если только SQL-движок не является гениальным или если у вас недостаточно ОЗУ для кэширования всей таблицы). –

+0

thanku, он работает очень хорошо. Не могли бы вы также объяснить мне, почему вы использовали сумму для этой команды @juergen –

+0

Условие в 'SUM()' return '1', если true и '0', если false. 'sum' добавляет эти истинные случаи. Вы также можете использовать 'count', но вместо этого нужно использовать' null' для ложных случаев, если '0' –

Смежные вопросы