Mysql 如何选择列的总和低于特定值的多行?
我有一个名为“markers”的表,其结构如下:Mysql 如何选择列的总和低于特定值的多行?,mysql,Mysql,我有一个名为“markers”的表,其结构如下: +------+---------------+-----------+-------------+ | id | about | time | type | |------|---------------|-----------|-------------| | 1 | text | 2 | restaurant | |------|--------
+------+---------------+-----------+-------------+
| id | about | time | type |
|------|---------------|-----------|-------------|
| 1 | text | 2 | restaurant |
|------|---------------|-----------|-------------|
| 2 | text | 1 | restaurant |
|------|---------------|-----------|-------------|
| 3 | text | 2 | museum |
|------|---------------|-----------|-------------|
| 4 | text | 2 | park |
+------+---------------+-----------+-------------+
从这个表中,我想选择一个行的组合,使时间之和小于或等于一个特定的值。例如,我想选择行编号1、3和4,因为总时间小于或等于6。
我认为查询听起来应该是这样的:选择SUMtime<6的“所有行”,但它没有那么简单。
另一个可能出现的问题是,如果我选择和等于3,在这种情况下,我有几个组合,第1行和第2行,第2行和第3行……等等。我可以如何选择每种类型的一个值?
我希望我能让别人明白我的意思。提前谢谢
SELECT id, time, type
FROM `markers`
WHERE type IN (
SELECT type FROM markers
WHERE (type = 'restaurant' OR type = 'museum' OR type = 'park')
GROUP BY type HAVING SUM(time_to_spend)< 20
)
对于3个人,我希望有这样的事情:
+---+--------+------+-------+
|id |关于|时间|类型|
|---|--------|------|-------|
|2 |文本| 1 |餐厅|
|---|--------|------|-------|
|3 |文本| 2 |博物馆|
|---|--------|------|-------|
或者任何其他组合。您可以发布预期的输出(比如3)吗?听起来您需要使用一些递归。这是一个背包问题的SQL解决方案,它与您的问题非常相似,您可能能够调整它。谢谢,我将尝试您建议的链接,我将返回更多信息。关于3的输出,如果我能在另一个表或其他地方看到或输出所有可能的组合,对我来说会更好。