如何解决其中条件用作列值的mysql查询?

时间:2019-05-01 06:59:49

标签: mysql

我有两个表,即。客户和估算大小。

客户

enter image description here

estimate_size

enter image description here

我想得到以下结果:

customers under $1000             23
customers between $1000-$10000   45
customers between $10000-25000   23

etc.

我正在使用以下SQL:

SELECT `e`.`estimate_type`, COUNT(*) AS 'Total Customers' FROM `customers` AS `c` INNER JOIN `estimate_size` AS `e` ON `c`.`customer_estimate` = `e`.`estimate_value` GROUP BY `e`.`estimate_value` ORDER BY `e`.`estimate_type` 

但是我得到错误的结果:

£10,000-25,000    3071
£1000-10,000      3071
£25,000-50,000    3071
Over £50,000      3071
Under £1000       3071

这是怎么了?

1 个答案:

答案 0 :(得分:1)

错误的是,您不能将where子句存储在列中的字符串中,然后期望数据库实现该功能,并以某种方式应用它,因为您已经对它说“此处的这个数字(customer_estimate)是等于那里的那个字符串(“ customer_estimate> 50000”)“-不是;这些值永远不会相等

您需要做的是使估算表如下所示:

estimate_id, estimate_type,   min_value, max_value
1,           "under 1000",    0,         1000
2,           "1000 to 10000", 1001,      10000
3,           "over 10000",    10001,     9999999999

然后是一个查询,如下所示:

SELECT
  e.estimate_type,
  COUNT(*)
FROM
  customer c
  INNER JOIN
  estimate_size e
  ON 
    c.value BETWEEN e.min_value and e.max_value
GROUP BY
  e.estimate_type

如果您确实想像现在这样坚持下去,您可能将不得不变得非常复杂/需要将字符串切成小段/将其解析为最小/最大,以便您可以像我在此处那样使用查询-不值得(脆弱),我会更改桌子以简化生活