mysql - SQLQuery - 对单个表中按第三个值分组的 2 个值的范围内的值进行计数

标签 mysql sql count group-by

我有一个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/

相关文章:

php - 如果我输入“,则帖子不会提交”

mysql - 在 MySQL 中确定给定数字的因子数而不重叠

mysql - 试图了解我的页面是否易受攻击

mysql - 可以将这 2 个 SQL 查询更改为 1 个吗?

mysql - 将用户历史记录保存在数据库中

用于物理科学测量的 SQL 数据类型 - double 或十进制

python - 计算每个符号在字符串中出现的次数 - python

xml - PL/SQL : Count number of nodes in xml

sql - MSSQL : Display Rows for a Select with Case and Count even if Count = 0

javascript - 使用 php 从 mysql 检索数据并在同一 HTML 页面中填写另一个表单的表单