我有两个表,即。客户和估算大小。
客户
estimate_size
我想得到以下结果:
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
这是怎么了?
答案 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
如果您确实想像现在这样坚持下去,您可能将不得不变得非常复杂/需要将字符串切成小段/将其解析为最小/最大,以便您可以像我在此处那样使用查询-不值得(脆弱),我会更改桌子以简化生活