根据列查询?

时间:2019-05-28 14:37:18

标签: sql oracle select

这里是SQL的初学者-说我有一个收件人表,我想提出一个查询并按种族对结果进行排序。通常我会这样做

select abcd
from recipient 
where ehthnicity = 'White' 

但此表将种族列为字段(属性)-这是一个不好的设计吗?

解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

  1. 是的,通常这是一个糟糕的设计。原因因细节而异。

  2. 此数据结构称为数据透视表,因此如果您受困于此类表且无法更改其设计,则想搜索如何执行数据透视查询。

    示例:https://databricks.com/blog/2018/11/01/sql-pivot-converting-rows-to-columns.html

    Oracle supports PIVOT clauses,为您幸运。

答案 1 :(得分:0)

美国人口普查局对种族和种族有非常明确的定义(here是一个很好的总结)。

您没有说数据的来源。如果它来自这样定义明确的来源,那么分开的列可能是明智的。您也可以使用关联表,尽管在实践中可能会发现比较复杂。

为什么在这种情况下可以使用单独的列?因为列定义明确。因为有少数。而且因为它们随着时间的推移并没有太大变化。关联/连接表也是一个很好的解决方案。是的。

我不建议您使用字符串列表。例如,泰格·伍兹(Tiger Woods)可能具有“白色,黑色,印度,亚洲”字样,并且解析起来很麻烦并且容易出错(天哪,“白色,黑色”与“黑色,白色”相同吗?)。