【问题标题】:Mysql count rows of distinct values of price between range from give ids and return sum of count valuesMysql在从给定ID和返回计数值的范围之间计算不同价格值的行
【发布时间】:2015-01-26 12:07:33
【问题描述】:

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

产品表

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 pid,依此类推 0-2 (2) 个计数 2-5(1)个计数

因为在价格表中,产品的价格选项更多,因此每种产品在表中都有 2 到 5 个不同的价格,但我应该将其显示为一个产品,甚至更多的价格。

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

感谢您的帮助。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      相关资源
      最近更新 更多