简体   繁体   中英

Mysql count rows of distinct values of price between range from give ids and return sum of count values

Hi I have two tables one is product and next is price table

Product Table

Id  Name
1   Bike
2   Car
3   Van

Price Table

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

My Sql query

$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)";

when I run this query price count values showing like below

0-2 has (6) count 2-5 has (2) count

but here I need to display as like. here I am looking to display as two products between 0-200 matched that are 1,2 pids and so on 0-2 (2) count 2-5 (1) count

because in price table there are more price options there for products so every product has 2 to 5 different prices in the table but I should display it as one product count even more prices had.

Kindly tell me how to write mysql query.

I would appreciate you help.

You can use COUNT(DISTINCT CASE ..) and in THEN clause use pid instead of 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM