【发布时间】:2014-02-05 17:12:48
【问题描述】:
SELECT
(case when tableA.gender = 'Male' then tableB.X) as Male,
(case when tableA.gender = 'Female' then tableB.X) as Female
...
FROM (MANY TABLES JOINT)
...
GROUP BY tableB.X
ORDER BY count(*) DESC
我试图通过查询另一列 (tableB.X) 是“男性”还是“女性”来基于一个字段 (column_name) 返回两列。我该怎么做呢?我仍然需要在 DESC 中为两列订购。谢谢。
每行返回一个值和一个性别(2 列)。我正在尝试根据性别将值拆分为两列,然后按每个拆分列按计数的降序显示..
即输入表:
value Gender
----- ------
AAA Male
BBB Female
AAA Male
CCC Male
AAA Female
BBB Female
即输出表:
Rank Male Female
---- ---- ------
1 AAA BBB (AAA because it has 2 male occurences, BBB has 2 female occurences)
2 CCC AAA (1 occurence each for male and female, ordered descending order)
我也不知道有多少不同的值,所以 SQL 必须为我计算。我可以使用两个查询获得结果,通过使用 WHERE 性别 = 男性和 WHERE 性别 = 女性,但我想知道我是否可以在一个查询中做到这一点。谢谢!
【问题讨论】:
-
你到底想做什么?因为这目前没有意义。例如,如果我的表有 'Alice'、'Female' 和 'Bob'、'Male' - 您希望在这个 SELECT 的结果中包含哪些行?你会有一排男性='鲍勃'和女性='爱丽丝'吗?或者您是否希望有一行 Male='Bob' 和 Female=NULL,而另一行 Male=NULL 和 Female='Alice'?
-
你能举一个你正在寻找的输出的例子吗?就像 PaF 说的,这目前还不是很清楚。
-
由于您已将示例数据添加到您的问题中,我现在正在以不同的方式阅读您的问题。不过,我没有看到男性和女性列之间有任何联系。可以只选择所有男性,然后对他们进行排名,然后对所有女性重复同样的事情吗?结果不在一个表中,但可以单独修复。
-
是的,我能做到 :) 我只是想知道是否可以使用 SQL 来完成