我是SQL和编程的新手,这可能是一个简单的问题,或者可能不是,我不知道。我只是知道我找不到直截了当的答案。我有一个包含大量不同数据表的excel文件。每个数据表都有相同的数据,仅适用于不同的出现情况。我希望能够将某些读数与主题的给定值相关联。 (即如果该人未满24岁,我希望能够返回比赛期间记录的所有速度)在这种情况下,在2小时的比赛中每分钟记录一次。这将是一个列的速度,年龄将在另一个列时代。每个科目都有一份数据表。我最终希望找到不同年龄段(24岁以下等)的所有人的平均速度。我可以将列与UNION命令组合。我在R中使用SQL。我看起来像这样:
sqlQuery(Race, paste("SELECT [PACE] FROM [Bill] UNION [STEVE]"))
我理解WHERE子句返回给定值存在的行。我的困境是我有足够的数据输入每一行的年龄非常耗时,这样我就可以查询行。
我是否可以创建一些代码,例如“ 返回所有年龄小于24的表格? ”
答案 0 :(得分:3)
我强烈建议不要将每个数据表放入自己的表中 - 只需在表中添加一列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
答案 1 :(得分:0)
尝试使用sql server的avg()
函数和where where ageCol < 24
答案 2 :(得分:0)
sqlQuery(Race, paste("SELECT [PACE], AVG(PACE) FROM [Bill] UNION [STEVE] WHERE columnName["age"] < 24"))
我不是SQL-server / T-SQL的高手,我没有开发R的经验,但在SQL中,语法与此并无太大差别。
但你可以像这样分开查询(我不知道语法是否合适):</ p>
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 :(得分:0)
问题:
Blockquote“还给我所有年龄小于24岁的桌子?”
意味着您将拥有多个名为age的列的表。如果年龄适用于跑步者,我建议您查看您的架构。你应该有一个名为:
的实体人 要么 跑步者 要么 参与者
有一个专栏年龄。诀窍就是将所有数据移动到该表中。然后一个简单的
选择 * 从 人 哪里 年龄< 24
会返回您要查找的所有数据。
我认为这让人感到困惑的是excel中的数据表与SQL中的表格的概念。您的数据表听起来像是参与者的实例,其中包含各种其他数据。您应该创建一个适合所有数据的模式,然后将其填入数据中的每个实例,而不是为每个数据表创建一个表。
在这里查看模式设计的参考: