SQL:获取行列值的总和

Posted

技术标签:

【中文标题】SQL:获取行列值的总和【英文标题】:SQL: Getting Sum of Row Column Values 【发布时间】:2021-07-28 13:20:54 【问题描述】:

我有一个包含以下信息的食谱表(早餐、午餐和主菜有 3 种不同的菜式类型,但放不下,每个都有 100 行:

我正在制作一个食谱网络应用程序,用户可以在其中输入他们一天需要多少卡路里,分为三餐。

我正在尝试在 sql 中查询以检索 3 行,其中每行具有每种菜肴类型,并且每个卡路里列的总和小于或等于某个值,并且每行彼此不同,因此没有行同名

到目前为止,我有一个查询返回 3 行,每道菜一个,但每道菜的最大卡路里而不是所有 3 行的总和(这里我将其设置为 >= 500)。

SELECT title, id, calories, dishType  
FROM livewell.recipes
where calories >=500
group by dishType
LIMIT 3

您还可以看到午餐和主菜具有相同的标题但 ID 不同,因此它们都属于午餐和晚餐类别,但如上所述,我希望没有具有相同标题的行

我绝对不是 SQL 方面的专家,但我一直在尝试找出执行此操作的最佳方法,因此我尝试寻找在一个查询中进行多个选择查询的方法(这样每个查询都会为每个dishType,然后在一个选择查询中将它们全部连接在一起):

SELECT (
    SELECT * 
    FROM livewell.recipes
    where dishType = 'breakfast'
    order by rand()
    limit 1
), (
SELECT * 
    FROM livewell.recipes
    where dishType = 'lunch'
    order by rand()
    limit 1
), (
SELECT * 
    FROM livewell.recipes
    where dishType = 'main course'
    order by rand()
    limit 1
)

这给了我这个错误:

Error Code: 1241. Operand should contain 1 column(s)

非常感谢任何帮助

【问题讨论】:

***.com/help/minimal-reproducible-example 【参考方案1】:

您正在使用同一个表来执行此操作 UNION,对于这种情况,在同一个 QUERY 中使用多个 1 会更简单:

Select *
from livewell.recipes
where dishType IN ('lunch', 'main course', 'breakfast')

创建一个如果你可以使用这个函数,但不明白你想要什么,我将只显示一个例子:

   Select *,
    (Case when calories > 500 then calories else 0 end) as IF_EXEMPLE
    from livewell.recipes
    where dishType IN ('lunch', 'main course', 'breakfast')

【讨论】:

我已经更新了帖子和代码,使其更清晰易懂。我实际上是在尝试进行一个查询,该查询将返回 3 行,每行是不同的菜肴类型,没有行具有相同的标题,并且每行卡路里的总和为给定值(例如 1500)。

以上是关于SQL:获取行列值的总和的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:查询以获取表 1 的 Col1 中的值的总和,以获取表 2 的 Col2 中的条件

pandas DataFrame-行列索引及值的获取

如何在飞镖列表中获取重复值的总和?

如何从此查询中获取“temp”列值的总和?

如何使用Javascript获取输入值的总和?

获取总和小于或等于数据集中值的记录