mysql - 如何解决这个特定的数据库SQL查询

标签 mysql sql database

规格:

植物学家在两个表格中维护有关植物及其最喜欢的天气状况的数据:
植物和天气。编写查询以打印每个的名称和天气类型
仅在一种天气中开花的植物。输出顺序无关紧要。

模式格式:

PLANT(NAME,SPECIES,SEED_DATE)

WEATHER(PLANT_SPECIES,TYPE)


属性说明:

名称:(String) Description of the plant.

种类:(String) The species of the plant.

植物种类:(String) The species of the plant.

类型:(String) The type of weather in which the plant will bloom.

种子日期:(Date) The date the seed was planted.

输出格式:

结果应包含开花的每种植物的名称和天气类型
示例中仅显示以下格式的一种天气。





给定输入和输出的说明:

苔藓植物仅在晴天时才会开花。因此结果包含
名为Marchantia1和Marchantia2的植物,其物种为苔藓植物。
在晴朗多雨的天气里,植物种类裸子植物会盛开。所以结果不
包含任何种类为裸子植物的植物名称。
(请注意,天气表可能有重复的条目)

注意:不,这不是作业! -_-这是面试中的一个问题(已结束)。我真的很想解决这个问题。但是可能有很多测试用例,我的简单sql查询无法解决。所以我需要你的帮助我是SQL查询的新手。

最佳答案

只需定期加入以获取植物名称及其天气类型。
要仅列出仅在一种气候下发生的植物,请在where子句中列出
子查询以排除不需要显示的物种。

select distinct plt.NAME, wht.TYPE
from PLANT plt
join WEATHER wht on wht.PLANT_SPECIES = plt.SPECIES
where 1 = (select count(distinct(wht0.TYPE)) from 
WEATHER wht0
where wht0.PLANT_SPECIES = plt.SPECIES)


该解决方案将(通常)适用于任何DBMS,例如,如果使用TSQL而不是MySQL,则可以利用RANK,CTE,ROWNUMBER等更复杂的工具

SQL Fiddle

关于mysql - 如何解决这个特定的数据库SQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47555789/

相关文章:

java - 使用 jooq 创建直方图

php - 我怎样才能缩短我的 mysql 查询以允许我交换我的 mysql 数据库中的索引?

c++ - 我可以强制 MySQL 以二进制形式传输数值吗?

php - mysql - 防止同时请求出现重复的 "active"条目

mysql - InnoDB 在外键上使用 where 子句时锁定不同的索引

mysql - 如果它们在 sql 中共享相同的 id 值,如何将值组合在一起

mysql - 我已导出 Mysql 数据库,但在导入新版本时遇到语法问题

mysql - 如果没有找到行,则在算术运算中使用一些默认值

MySQL GROUP BY 和 GROUP_CONCAT 返回所有行合并?

mysql - 如何高效地一次获取数据并统计行数?