我有一个MySQL数据库,结构如下:(左边的数字是行号)
+------------+----------+--------------+-------------+
| start_dsgn | end_dsgn | min_cost_1 | min_cost_2 |
+------------+----------+--------------+-------------+
1| 1 | 2 | 3 | 100 |
2| 1 | 3 | 5 | 153 |
3| 1 | 4 | 10 | 230 |
4| 2 | 1 | 4 | 68 |
5| 2 | 3 | 5 | 134 |
6| 3 | 1 | 7 | 78 |
7| 3 | 2 | 8 | 120 |
+------------+----------+--------------+-------------+
我想查询数据库,以便对于每个起始设计,返回两个成本输入之一小于输入的最终设计的计数。例如,用户输入 cost_1 和 cost_2 的值。该查询将返回按设计分组的行数计数,其中 cost_1 >= min_cost_1 OR cost_2 >= min_cost_2。
因此,对于上面的数据库,我们假设用户输入
cost_1 = 5
cost_2 = 100
这应该返回类似:
{1:2, 2:2, 3:1}
结构在哪里:
{start_design_1: count(row 1 + row 2), start_design_2:count(row 4 + row 5) , start_design_3:count(row 6)}
我只是想知道是否有人对如何执行此查询有任何提示或解决方案,因为我对 SQL 比较陌生。非常感谢。
另请注意,我的数据库并未像示例中那样排序,我这样做是为了使示例更易于理解。
最佳答案
您没有指定您使用的 SQL 版本,因此我在 SQL Server 中执行此示例,其中 @cost_1 是变量。您可以将其调整为您所使用的任何 SQL 变体的语法。以下内容将为您提供所需的 SQL 结果集计数:
SELECT start_dsgn, COUNT(CASE WHEN min_cost_1 <= @cost_1 OR min_cost_2 <= @cost_2 THEN end_dsng END) as Cnt
FROM table
GROUP BY start_dsgn
一旦有了它,您就可以将其转换为您想要的任何格式,无论您使用哪种语言来查询数据库。您也没有指定您使用的语言,但看起来您想要一本以 start_dsgn 为键的字典。
大多数语言都会返回列表或列表、元组或字典的数组,具体取决于您使用的内容。从那里可以很容易地将它们转换为任何其他形式,至少在 Python 中是这样。 C#、Java 和 Swift 等强类型语言有点棘手。
关于mysql - SQLQuery - 对单个表中按第三个值分组的 2 个值的范围内的值进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29812229/