2013-09-27 256 views

Trả lời

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

nếu bảng có nhiều màu hơn, truy vấn ở trên trả về tất cả các màu, không chỉ 3 lựa chọn – AdrianBR

+14

@AdrianBR: Đó là câu hỏi đúng nghĩa đen và không xem qua vấn đề cơ bản thực tế. – eggyal

+5

@eggyal 'CHỌN màu, COUNT (*) TỪ T_table ĐÂU MÀU VÀO ('VÀNG', 'MÀU XANH', 'ĐỎ') NHÓM THEO màu ' – 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'; 

hoặc

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

bạn chấp nhận câu trả lời không chính xác theo yêu cầu của bạn. câu trả lời được chấp nhận của bạn trả về tất cả các màu, chứ không phải chỉ 3 màu bạn đã chọn. – AdrianBR

31

Nếu bạn muốn kết quả là trong một hàng, bạn có thể sử dụng:

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

Hoặc chỉ 'SUM (color = 'YELLOW')' vv – eggyal

+1

@eggyal Có, nhưng khó có thể thấy những gì đang diễn ra ở đây và bạn không thể chọn đếm với trọng số như 'SUM (IF (color = 'YELLOW') , 0,75, 0)) '. – eisberg

+0

Cảm ơn vì điều này. Và điều trọng lượng cũng có thể hữu ích. – TrtG

0

Bạn có thể làm điều này bằng subquery .

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

Dường như bạn cần dấu ngoặc đơn xung quanh câu lệnh SELECT lồng nhau, ít nhất là trong PostgreSQL. – Wolverine

+1

bạn có chắc đây là một truy vấn không? !! –

+0

yeah @AliSherafat – Faisal

0

Đây là câu trả lời của tôi: Este Ejemplo SQL Indica la cantidad de un Grupo y Suma los encontrado Con S y N por separado. Se que no es la Respuesta pero puede ser usado para otros casos. Biển Bendito Israel.

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 

Tôi hy vọng điều này sẽ giúp ích cho bạn.