[英]MySql: select values from one column into multiple columns in the result
我有這樣的表:
Bike_orders
ID | model_id | order_date | male_or_female_bike
5 | 099 | 2014-04-08 | M
12 | 099 | 2014-04-08 | F
19 | 012 | 2014-02-12 | NULL
40 | 123 | 2014-04-08 | F
33 | 040 | 2014-04-08 | NULL
其中“ male_or_female_bike”列:
M或NULL =男性自行車
F =女自行車
(現在請忽略列“模型ID”-只是為了通知我需要它來創建與另一個表的聯接)
理想的結果:
order_date | count_male | count_female
2014-04-08 | 2 | 2 |
2014-02-12 | 1 | 0 |
我想知道:每天售出多少輛F / M自行車。 就像我需要按日期“划分” male_or_female_bike。
我只能這樣想辦法:
select id,
(
select male_or_female_bike
from bike_orders o2
where o2.male_or_female_bike = 1
and o2.id = o.id
) as F,
(
select male_or_female_bike
from bike_orders o3
where o3.id = o.id
and (male_or_female_bike = 0 or male_or_female_bike is null)
) as M
from bike_orders o
where /*some other condition here*/
GROUP BY date
但這是無效的。 為此目的是否存在專用的MySQL? 還有其他更好/更快的方法嗎?
您可以簡單地做到這一點:
SELECT order_date,
SUM(CASE WHEN male_or_female_bike IS NULL THEN 1 WHEN male_or_female_bike='M' THEN 1 ELSE 0 END) as MaleCount,
SUM(CASE WHEN male_or_female_bike ='F' THEN 1 ELSE 0 END) as FemaleCount
FROM Bike_orders
GROUP BY order_date
ORDER BY order_date DESC
結果:
ORDER_DATE MALECOUNT FEMALECOUNT
April, 08 2014 00:00:00+0000 2 2
February, 12 2014 00:00:00+0000 1 0
SELECT order_date
, COALESCE(SUM(COALESCE(gender,'M')='M'),0) M
, COALESCE(SUM(gender='F'),0) F
FROM my_table
GROUP
BY order_date;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.