使用多列的SQL查询前N行记录

3
我有一个Sqlite数据库想要查询。我的基本SQL知识使我能够查询大多数我需要的内容,但我在这里卡住了:
表格长这样(简化!):
| Name            | Year | Title   | Musician 1 | Musician 2  |
| --------------- | ---- | ------- | ---------- | ----------- |
| Doe, Jon        | 2007 | Title 1 | Beatles    | The Stooges |
| May, Peter      | 2001 | Title 2 |            | Beatles     |
| Schmidt, Andrea | 1997 | Title 3 | Nick Cave  |             |

我想查询2000年代的热门音乐人,并获得类似以下输出的结果。
| Name        | Count |
| ----------- | ----- |
| Beatles     | 2     |
| The Stooges | 1     |

你如何实现这个?谢谢!
2个回答

3
如果我理解正确的话,您需要这个。
select  count(*), name from (
    select Musician_1 as Name from table where Year >= 2000
    union all 
    select Musician_2 as Name from table where Year >= 2000
) t
group by Name 
order by count(*) desc

这对我很有效,我认为这是更简单的答案,因为我能够自己改变条件等,并理解自己在做什么。我需要再仔细研究一下union。谢谢! - karkraeg
@kbecker87 - 不客气,请注意,如果 in the 2000s 意味着2000年到2010年之间的年份(根据 @scaisEdge 的说法),则您应该使用 ...year between 2000 and 2010 替换 ... Year >= 2000 。否则,此查询将为您提供2000年后的所有记录。祝编码愉快。 - Oto Shavadze

2
您可以使用 UNION ALL。
  select musician, count(*) from (

      select year, musician_1 as musician
      from my_table 
      union  all

      select year, musician_2
      from my_table 
  ) t 
  where t.year between 2000 and 2010
  group by t.musician

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接