2013-09-27 3 views

ответ

45
SELECT color, COUNT(*) FROM t_table GROUP BY color 
+1

Если таблица имеет больше цветов, запрос выше возвращает все цвета, а не только 3 выбранных – AdrianBR

+14

@AdrianBR: Это вопрос довольно буквально и не позволяет увидеть фактическую основную проблему. – eggyal

+5

@eggyal 'SELECT color, COUNT (*) FROM t_table WHERE color IN (« ЖЕЛТЫЙ »,« ГОЛУБОЙ »,« КРАСНЫЙ ») GROUP BY color' – josephdpurcell

8
SELECT 'yellow' as color ,COUNT(*) FROM t_table WHERE color = 'YELLOW' 
union 
SELECT 'blue' , COUNT(*) FROM t_table WHERE color = 'BLUE' 
union 
SELECT 'red',COUNT(*) FROM t_table WHERE color = 'RED'; 

или

select color, count(*) from table where color in ('red', 'blue', 'yellow') group by 1 
+2

вы приняли только неправильный ответ по вашему запросу. ваш принятый ответ возвращает все цвета, а не только выбранные вами 3. – AdrianBR

31

Если вы хотите, чтобы результат в одной строке вы можете использовать:

SELECT 
    SUM(IF(color = 'YELLOW', 1, 0)) AS YELLOW, 
    SUM(IF(color = 'BLUE', 1, 0)) AS BLUE, 
    SUM(IF(color = 'RED', 1, 0)) AS RED 
FROM t_table 

Working example

+4

Или просто 'SUM (color = 'YELLOW')' и т. Д. – eggyal

+1

@eggyal Да, но трудно понять, что здесь происходит, и вы не можете рассчитывать с весами типа 'SUM (IF (color = 'YELLOW' , 0,75, 0)). – eisberg

+0

Спасибо за это. И вес вещь может быть полезна также. – TrtG

0

Вы можете сделать это с помощью подзапросов ,

SELECT(
    SELECT COUNT(*) FROM t_table WHERE color = 'YELLOW', 
    SELECT COUNT(*) FROM t_table WHERE color = 'BLUE', 
    SELECT COUNT(*) FROM t_table WHERE color = 'RED' 
); 
+1

Кажется, вам нужны скобки вокруг вложенных операторов SELECT, по крайней мере, в PostgreSQL. – Wolverine

+1

Вы уверены, что это один вопрос? !! –

+0

да @AliSherafat – Faisal

0

Это мой ответ: Este EJEMPLO SQL Indica ла cantidad де ун Grupo у Suma лос encontrado жулик S у N Por separado. Очередь на посадку в аэропорту. Бендито море Израиль.

SELECT sm_med_t_servicios.id as identidad, count(sm_adm_t_admision.id) as cantidad , 
SUM(IF(sm_adm_t_admision.atendido = 'S', 1, 0)) AS atendidos, 
SUM(IF(sm_adm_t_admision.atendido = 'N', 1, 0)) AS por_ver 

FROM sm_med_t_servicios 
LEFT JOIN sm_adm_t_admision ON sm_med_t_servicios.id = sm_adm_t_admision.sm_med_t_servicios_id 
WHERE sm_med_t_servicios.m_empresas_id = '2' 
GROUP BY sm_med_t_servicios.id 

Надеюсь, это поможет вам.

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