当前位置: 首页 > 面试题库 >

SQL使用多个/相关列计算项目频率?

芮建茗
2023-03-14
问题内容

我有一个3列和数千行的表,前2列有数据。第三列当前为空,我需要根据第一列和第二列中已有的数据填充第三列。

假设我在第一栏中有状态,在第二栏中有水果条目。我需要编写一条SQL语句来计算 每种水果来自的不同状态数
,然后将此流行度数字插入到每一行的第三列中。该行中的受欢迎程度数字1表示水果仅来自一个州,受欢迎程度数字4表示该水果来自4个州。所以我的桌子目前是这样的:

state     fruit     popularity

hawaii    apple     
hawaii    apple     
hawaii    banana       
hawaii    kiwi      
hawaii    kiwi      
hawaii    mango        
florida   apple      
florida   apple        
florida   apple        
florida   orange      
michigan  apple     
michigan  apple     
michigan  apricot   
michigan  orange    
michigan  pear      
michigan  pear      
michigan  pear      
texas     apple     
texas     banana    
texas     banana    
texas     banana    
texas     grape

我需要弄清楚如何计算然后更新第三列,即受欢迎程度,这是出口该水果的州数。目标是生成下表(对不起的双关语),根据上表,在所有4个州中都出现“苹果”,在2个州中都出现了橘子和香蕉,而在1个州中只出现了奇异果,芒果,梨和葡萄。状态,因此它们对应的受欢迎程度数字。

state     fruit     popularity

hawaii    apple     4
hawaii    apple     4
hawaii    banana    2   
hawaii    kiwi      1
hawaii    kiwi      1
hawaii    mango     1   
florida   apple     4 
florida   apple     4   
florida   apple     4   
florida   orange    2  
michigan  apple     4
michigan  apple     4
michigan  apricot   1
michigan  orange    2
michigan  pear      1
michigan  pear      1
michigan  pear      1
texas     apple     4
texas     banana    2
texas     banana    2
texas     banana    2
texas     grape     1

我小的程序员头脑说,试图找到一种在某种脚本中循环遍历数据的方法,但是对SQL和数据库有所了解,似乎您并没有在SQL中编写冗长而缓慢的循环脚本。我什至不确定是否可以?但是相反,在SQL中有更好/更快的方法可以做到这一点。

任何人都知道如何在SQL语句中为每一行计算和更新第三列,在此称为流行度,并与每种水果所来自的状态数相对应?感谢您的阅读,非常感谢您的帮助。

到目前为止,我已经在下面尝试了这些SQL语句,这些语句可以输出,但并不能完全满足我的需要:

--outputs those fruits appearing multiple times in the table
SELECT fruit, COUNT(*)
  FROM table 
 GROUP BY fruit
HAVING COUNT(*) > 1
 ORDER BY COUNT(*) DESC

--outputs those fruits appearing only once in the table
SELECT fruit, COUNT(*)
  FROM table 
 GROUP BY fruit
HAVING COUNT(*) = 1

--outputs list of unique fruits in the table
SELECT COUNT (DISTINCT(fruit))
  FROM table

问题答案:

如果您只想使用优先级来更新表,它将看起来像:

update my_table x
   set popularity = ( select count(distinct state) 
                        from my_table
                       where fruit = x.fruit )

如果要选择数据,则可以使用分析查询:

select state, fruit
     , count(distinct state) over ( partition by fruit ) as popularity
  from my_table

这提供了每个水果不同状态的数量。



 类似资料:
  • Laradock Related Projects Docker Stacks: A GUI for managing Laradock. (by Subhadip Naskar) Laradock CLI: A CLI for managing Laradock. (by Lorin Lee) Laradock CLI: A CLI for managing Laradock. (by Harl

  • 问题内容: 我在Sqlite中有一个查询,其中涉及复杂的列计算,可以这样说: 我想将此计算选择为,但我还需要将其用作另一种计算的组成部分: 不幸的是,这会产生错误: 我知道我可以简单地重复计算: 但是,假设操作复杂且昂贵,是否有什么方法可以在以后重新引用它而不必重新计算呢? 问题答案: 您需要使用子查询。 结果

  • 问题内容: 我有两个数组,它们的形状为和。我想计算每对可能的行之间和(分别来自和)之间的相关系数。 什么是最快,最Python化的方法?(遍历,对我来说似乎既不快速也不是pythonic。)我期望答案涉及and / or 。现在,我的数组是 s,但是我愿意将它们转换为其他类型。 我期望我的输出是一个带有shape的数组。 注意:当我说“相关系数”时,我指的是皮尔逊积矩相关系数。 以下是一些注意事项

  • 问题内容: 我有两个表,和。中的每个条目都有一个指向的外键。使用Sequelize,如何获取与中的每个条目相关联的所有条目以及其中的条目总数? 原始SQL: 楷模: 问题答案: 使用与和为: 或者,您可能还需要添加一个:

  • 我正在尝试使用一个函数从pandas数据帧中的多个列计算多个列。该函数接受三个参数-a-、-b-和-c-,并返回三个计算值-sum-、-prod-和-quot-。在我的pandas数据框架中,我有三个列-a-、-b-和-c-我想从中计算列-sum-、-prod-和-quot-。 我所做的映射只有在正好有三行时才起作用。我不知道出了什么问题,尽管我认为这与选择正确的轴有关。有人能解释一下发生了什么,

  • 问题内容: 在中,我使用或计算成对互相关函数,以便找出哪个偏移使我获得了最大值。从它的外观来看,给了我一个规范化的值序列。Python的scipy中是否有类似的东西,还是应该使用该模块?目前,我正在执行以下操作: 问题答案: 要使一维数组互相关,请使用numpy.correlate。 对于2d数组,请使用scipy.signal.correlate2d。 还有scipy.stsci.convolv