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:获取行列值的总和的主要内容,如果未能解决你的问题,请参考以下文章