表格:
CREATE TABLE category (
idcategory INT,
category VARCHAR(50));
CREATE TABLE themes (
idtheme INT,
idcategory INT,
theme VARCHAR(50));
n 个类别。对于本例,假设为 6。 每个类别有 18 个主题。不多也不少。
我想做一个查询,显示数据库中每个类别的主题,例如:
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| CATEGORY 1 | CATEGORY 2 | CATEGORY 3 | CATEGORY 4 | CATEGORY 5 | CATEGORY 6 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| CAT1 - THEME 1 | CAT2 - THEME 1 | CAT3 - THEME 1 | CAT4 - THEME 1 | CAT5 - THEME 1 | CAT6 - THEME 1 |
| CAT1 - THEME 2 | CAT2 - THEME 2 | CAT3 - THEME 2 | CAT4 - THEME 2 | CAT5 - THEME 2 | CAT6 - THEME 2 |
| CAT1 - THEME 3 | CAT2 - THEME 3 | CAT3 - THEME 3 | CAT4 - THEME 3 | CAT5 - THEME 3 | CAT6 - THEME 3 |
| CAT1 - THEME 4 | CAT2 - THEME 4 | CAT3 - THEME 4 | CAT4 - THEME 4 | CAT5 - THEME 4 | CAT6 - THEME 4 |
| CAT1 - THEME 5 | CAT2 - THEME 5 | CAT3 - THEME 5 | CAT4 - THEME 5 | CAT5 - THEME 5 | CAT6 - THEME 5 |
| CAT1 - THEME 6 | CAT2 - THEME 6 | CAT3 - THEME 6 | CAT4 - THEME 6 | CAT5 - THEME 6 | CAT6 - THEME 6 |
| CAT1 - THEME 7 | CAT2 - THEME 7 | CAT3 - THEME 7 | CAT4 - THEME 7 | CAT5 - THEME 7 | CAT6 - THEME 7 |
| CAT1 - THEME 8 | CAT2 - THEME 8 | CAT3 - THEME 8 | CAT4 - THEME 8 | CAT5 - THEME 8 | CAT6 - THEME 8 |
| CAT1 - THEME 9 | CAT2 - THEME 9 | CAT3 - THEME 9 | CAT4 - THEME 9 | CAT5 - THEME 9 | CAT6 - THEME 9 |
| CAT1 - THEME 10 | CAT2 - THEME 10 | CAT3 - THEME 10 | CAT4 - THEME 10 | CAT5 - THEME 10 | CAT6 - THEME 10 |
| CAT1 - THEME 11 | CAT2 - THEME 11 | CAT3 - THEME 11 | CAT4 - THEME 11 | CAT5 - THEME 11 | CAT6 - THEME 11 |
| CAT1 - THEME 12 | CAT2 - THEME 12 | CAT3 - THEME 12 | CAT4 - THEME 12 | CAT5 - THEME 12 | CAT6 - THEME 12 |
| CAT1 - THEME 13 | CAT2 - THEME 13 | CAT3 - THEME 13 | CAT4 - THEME 13 | CAT5 - THEME 13 | CAT6 - THEME 13 |
| CAT1 - THEME 14 | CAT2 - THEME 14 | CAT3 - THEME 14 | CAT4 - THEME 14 | CAT5 - THEME 14 | CAT6 - THEME 14 |
| CAT1 - THEME 15 | CAT2 - THEME 15 | CAT3 - THEME 15 | CAT4 - THEME 15 | CAT5 - THEME 15 | CAT6 - THEME 15 |
| CAT1 - THEME 16 | CAT2 - THEME 16 | CAT3 - THEME 16 | CAT4 - THEME 16 | CAT5 - THEME 16 | CAT6 - THEME 16 |
| CAT1 - THEME 17 | CAT2 - THEME 17 | CAT3 - THEME 17 | CAT4 - THEME 17 | CAT5 - THEME 17 | CAT6 - THEME 17 |
| CAT1 - THEME 18 | CAT2 - THEME 18 | CAT3 - THEME 18 | CAT4 - THEME 18 | CAT5 - THEME 18 | CAT6 - THEME 18 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
因此,每一列都是一个类别,行是不同的主题。 每个类别都是相互独立的,主题也是如此,除了属于同一类别的主题之外。
我已经为此苦苦挣扎了几个小时。也许我老了或者精疲力尽了。
关于如何处理这个查询有什么想法吗?
最佳答案
如果您确切知道自己有哪些类别,则可以使用条件聚合:
select max(case when categoryid = 1 then theme end) as cat1,
max(case when categoryid = 2 then theme end) as cat2,
. . .
from (select th.*,
row_number() over (partition by th.idcategory order by th.idtheme) as seqnum
from themes th
) th
group by seqnum;
对结果集中所需的每一列重复该逻辑。
关于Mysql 查询,每个列具有不同类别的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59332297/