I made a table called tbl
with this code:
CREATE TABLE tbl
(
`Year` int,
`Album` varchar(255),
`Artist` varchar(255),
`Label` varchar(255),
`Genre` varchar(255),
`id` int
)
;
INSERT INTO tbl
(
`Year`,
`Album`,
`Artist`,
`Label`,
`Genre`,
`id`
)
VALUES
(1990, "Greatest Hits", "The Best", "Least Def", "hip hop", 123),
(1990, "Greatest Hits", "The Best", "Roofless", "hip hop", 123),
(1990, "4-Boyz", "3 Guyz", "Pacific", "pop-dance", 23),
(1990, "4-Boyz", "3 Guyz", "Atlantic", "pop-dance", 23)
;
I want to run a query to show me the count of genres for each year, without double counting because of the Label
column. I want this:
Year, hip hop, pop-dance
1990, 1, 1
What query must I run to get what I want?
Because you can't use pivot
, you can do this.
select year,
count(distinct case when `Genre` = 'hip hop' then 1 end) as hiphop,
count(distinct case when `Genre` = 'pop-dance' then 1 end) as popdance
from tbl
group by year
The accepted answer worked for me.
I add here a more complex case, with join, in case someone needs.
see also:
Combining the results of two SQL queries as separate columns
my example:
select Info.*, Roots.*, ColeColeFit.*, f10.*, f20k.*
from Info
join (select * from Data where Frequency = 10) as f10
on f10.Info_ID = Info.id
join (select * from Data where Frequency = 20000) as f20k
on f20k.Info_ID = Info.id
join Roots
on Info.File_Num = Roots."Plant number"
join ColeColeFit
on ColeColeFit.id = Info.id
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.