【问题标题】:SQL: Select table if a column has a given valueSQL:如果列具有给定值,则选择表
【发布时间】:2011-06-28 14:34:28
【问题描述】:

我是 SQL 和一般编程的新手,这可能是一个简单的问题,也可能不是,我不知道。我只知道我无法找到一个直截了当的答案。我有一个包含一堆不同数据表的 excel 文件。每个数据表都有相同的数据,只是针对不同的出现。我希望能够将某些读数与主题的给定值相关联。 (即,如果此人未满 24 岁,我希望能够返回比赛期间记录的所有配速)在这种情况下,将在 2 小时的比赛中每分钟记录一次配速。那将是一个列速度,年龄将是另一个列时代。每个主题都会有一个数据表。我最终想找到不同年龄范围(24 岁及以下等)的所有人的平均速度。我可以将列与 UNION 命令结合起来。我正在使用 R 中的 SQL。我所拥有的看起来像这样:

sqlQuery(Race, paste("SELECT [PACE] FROM [Bill] UNION [STEVE]"))

我理解 WHERE 子句返回存在给定值的行。我的困境是我有足够的数据输入每一行的年龄以便我可以查询这些行会非常耗时。

我是否可以创建代码来询问“将所有年龄小于 24 岁的表格归还给我?

【问题讨论】:

  • 您需要将此数据放在一个表中,其中人名是表中的一列(而不是表本身的名称)
  • R 如何适合这里的等式?您的 sql 查询似乎也不是有效的语法。 unionunion all 运算符需要完整的选择查询才能工作。也许像select [pace] from [bill] union select [pace] from [steve] 这样的东西。我也没有在您的选择查询中看到年龄列...
  • 您实际上可能需要两张表:第一张表中的记录是人,还有姓名和年龄。第二个表是人名和步速测量值。
  • 这只是一个类似于我正在从事的项目的示例,该项目的信息是机密的。这是一个庞大的数据集,需要对其进行大量分析。我想使用 SQL 来操作不同的数据表(将其作为表引入 R)。 R 可以将 sql 与 RODBC 包一起使用。我认为用 sql 操作会更容易,然后分析 R 中的数据,如果我要使用 R 本身,我会有一个包含很多列的巨大表,所有列的名称都非常相似(大多数用于需要保存在一起的相同字段。)
  • sqlQuery 是 R 中的命令,它允许人们查询导入的数据。每个事件都在 excel 中设置为不同的数据表(导入为名称为 last_name_4_5_11$ 等的单个表)。每个表都包含某些值,让我们称它们为“C”,每 15 分钟记录一次。个人有不同的值,这些值是个人独有的并且永远不会改变的独立变量,我将它们称为“H”和“B”。我希望能够找到哪些人具有某些条件(“B”

标签: mysql sql sql-server tsql


【解决方案1】:

我强烈建议不要将每个数据表放入自己的表中 - 只需在表中添加一列 DATA_SHEET 以区分出现的情况。 也就是说,我可能会更进一步并使用这些表格(假设一个数据表代表一个种族):

PERSON
------
PK
Name
Age (better: Date of birth, since age changes over time)
Gender
...

RACE
----
PK
Name
Start date
...

PACE
----
PERSON_FK -- foreign key to PERSON table
RACE_FK -- foreign key to race table
PACE
...

这样,在给定比赛中获得 24 岁以下人群的所有步数:

select race.name race_name, person.name person_name, pace.pace 
from person, race, pace
where person.pk = pace.person_fk
and race.pk = pace.race_fk
and person.age < 24

【讨论】:

  • 什么是外键?我该如何设置?
  • @Lucas 外键是跨表引用。在本例中,通过在race_fk 上添加外键,您可以告诉数据库这个race_fk“指向” Race 表中的一行,请参阅en.wikipedia.org/wiki/Foreign_key 以进一步阅读。
【解决方案2】:
sqlQuery(Race, paste("SELECT [PACE], AVG(PACE) FROM [Bill] UNION [STEVE] WHERE columnName["age"] < 24"))

我不是 SQL-server/T-SQL 方面的大师,也没有开发 R 的经验,但在 SQL 中,语法与此没有太大区别。

但是你可以像这样分开查询(我不知道语法是否好):

sqlQuery(Race, paste("SELECT [PACE] FROM [Bill] UNION [STEVE] WHERE [PACE].age < 24"))

然后:

sqlQuery(Race, paste("SELECT AVG([PACE].age) FROM [Bill] UNION [STEVE]"))

【讨论】:

    【解决方案3】:

    问题:

    Blockquote“把年龄小于 24 岁的所有表都还给我?”

    表示您将拥有多个表,其中包含名为 age 的列。如果年龄适用于跑步者,我建议您查看您的架构。你应该有一个实体命名为:

    人 或者 赛跑者 或者 参与者

    这有一个专栏年龄。诀窍就是简单地将所有数据移动到该表中。然后一个简单的

    选择 * 从 人 在哪里 年龄

    将返回您要查找的所有数据。

    我认为令人困惑的地方在于 excel 中的数据表与 SQL 中的表的概念。您的数据表听起来像是具有各种附加数据的参与者的实例。与其为每个数据表创建一个表,不如创建一个适合所有数据的模式,然后用数据中的每个实例填充它。

    在这里查看架构设计的参考:

    How to design this RDBMS schema?

    【讨论】:

      【解决方案4】:

      试试sql server的avg()函数和where条件where ageCol &lt; 24

      【讨论】:

      • 有没有办法让我确定 WHERE 子句中的特定条目,以便在 Age 小于 24 时使用该表中列的所有值? WHERE 命令只为具有年龄的条目返回一个对应的速度值,但是有一个年龄条目和多个速度条目。
      猜你喜欢
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多