Mysql在给定ID和计数值的返回总和之间计算不同价格值的行

时间:2015-01-26 12:07:33

标签: mysql

您好我有两张桌子,一张是产品,下一张是价格表

产品表

Id  Name
1   Bike
2   Car
3   Van

价格表

Id Price   Pid
1   100    1
2   150    1
3   200    1
4   100    2
5   110    2
6   120    2
7   300    3
8   310    3

我的Sql查询

$sql = "SELECT SUM(CASE WHEN price >= 0 AND price <= 200 THEN 1 ELSE 0 END) AS `0-2`,
SUM(CASE WHEN price >= 201 AND price <= 500 THEN 1 ELSE 0 END) AS `2-5`,
COUNT(pid) AS `All Values`
FROM price where pid IN(1,2,3)";

当我运行此查询价格计数值时,显示如下

0-2有(6)计数 2-5有(2)计数

但在这里我需要显示为。 在这里,我希望显示0到200匹配的两个产品,即1,2 pids等等 0-2(2)计数 2-5(1)计数

因为在价格表中有更多的产品价格选择,所以每个产品在表格中有2到5个不同的价格,但我应该将它显示为一个产品数量更多的价格。

请告诉我如何编写mysql查询。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用COUNT(DISTINCT CASE ..)并在THEN子句中使用pid代替1

SELECT 
COUNT(DISTINCT CASE WHEN price >= 0 AND price <= 200 THEN pid END) AS `0-2`,
COUNT(DISTINCT CASE WHEN price >= 201 AND price <= 500 THEN pid END) AS `2-5`,
COUNT(DISTINCT pid) AS `All Values`
FROM price 
WHERE pid IN(1,2,3)

DEMO

相关问题