计算分组和连续的结果

时间:2016-06-17 11:02:01

标签: mysql sql

我试图制作包含存储产品的数据库。每个产品都包含未知数量的可能"选择"它定义了存储的产品版本。

例如,产品Sofa包含选择Color: BlackLegs: WoodMaterial: Leather,而产品Bed仅包含选择Mattress: Hard

我已经使用GROUP_CONCAT来获得所有类似的沙发:

SELECT DISTINCT p.product, p.size, p.color,p.storage,
GROUP_CONCAT(s.selection, ': ' ,s.option) AS selection
FROM product p
    INNER JOIN selection s
       ON p.id = s.product_id
WHERE product.id = 123
GROUP BY s.id;

问题是我如何计算查询中连接的产品数量,或者甚至可以用单个查询计算?

编辑:

SELECT DISTINCT product_storage.product, product_storage.size,
product_storage.color, product_storage.storage,
GROUP_CONCAT(product_storage_selection.selection, 
product_storage_selection.option) as selection
FROM product_storage_link
INNER JOIN product_storage 
ON product_storage_link.product_storage_id = product_storage.id
INNER JOIN product_storage_selection 
ON product_storage.id = product_storage_selection.product_storage_id
WHERE product_storage_link.product_id = 7207
GROUP BY product_storage.id;

给出

Product    Color    Size    Selection
Product1   Black    10x10   Selection1:Option1, Selection2:Option1
Product1   Black    10x10   Selection1:Option2, Selection2:Option1
Product1   White    10x10   Selection1:Option1, Selection2:Option1

我尝试在这两个表中计算重复数,并从其他表中获得相同的选择。希望这能解决问题。

所以我们的目标是获得例如:

Product    Color    Size    Selection                                amount
Product1   Black    10x10   Selection1:Option1, Selection2:Option1   3
Product1   Black    10x10   Selection1:Option2, Selection2:Option1   1
Product1   White    10x10   Selection1:Option1, Selection2:Option1   2

数据库中的部分:

http://sqlfiddle.com/#!9/fec0b

编辑2:

这是包含数据的整个表格。

| id | product |  size |    color | storage |        selection |         option |
|----|---------|-------|----------|---------|------------------|----------------|
|  1 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 1 |   Vaihtoehto 1 |
|  1 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |
|  2 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 1 |   Vaihtoehto 1 |
|  2 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |
|  3 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 1 |   Vaihtoehto 1 |
|  3 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |
|  4 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 1 |   Vaihtoehto 2 |
|  4 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 2 |
|  5 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 1 |   Vaihtoehto 2 |
|  5 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 2 |
|  6 |     asd | Koko2 | 2 Väri 2 |   false | Lisävaihtoehto 1 |   Vaihtoehto 1 |
|  6 |     asd | Koko2 | 2 Väri 2 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |
|  7 |     asd | Koko2 | 2 Väri 2 |   false | Lisävaihtoehto 1 |   Vaihtoehto 1 |
|  7 |     asd | Koko2 | 2 Väri 2 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |

首先从这些值构建产品。

| id | product |  size |    color | storage |        selection |         option |
|----|---------|-------|----------|---------|------------------|----------------|
|  1 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 1 |   Vaihtoehto 1 |
|  1 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |

|  2 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 1 |   Vaihtoehto 1 |
|  2 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |

|  3 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 1 |   Vaihtoehto 1 |
|  3 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |

应该出现:

| product |  size |    color | storage |                                                   selection |         amount |
|---------|-------|----------|---------|-------------------------------------------------------------|----------------|
|     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 1:Vaihtoehto 1,Lisävaihtoehto 2:Vaihtoehto 1 |              3 |

第二种产品构造来自:

| id | product |  size |    color | storage |        selection |         option |
|----|---------|-------|----------|---------|------------------|----------------|
|  4 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 1 |   Vaihtoehto 2 |
|  4 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 2 |
|  5 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 1 |   Vaihtoehto 2 |
|  5 |     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 2 |

出来:


| product |  size |    color | storage |                                                     selection |         amount |
|---------|-------|----------|---------|---------------------------------------------------------------|----------------|
|     asd | Koko1 |    Väri1 |   false | Lisävaihtoehto 1:Vaihtoehto2, Lisävaihtoehto 2,2 Vaihtoehto 2 |              2 |


第三个来自这些:

| id | product |  size |    color | storage |        selection |         option |
|----|---------|-------|----------|---------|------------------|----------------|
|  6 |     asd | Koko2 | 2 Väri 2 |   false | Lisävaihtoehto 1 |   Vaihtoehto 1 |
|  6 |     asd | Koko2 | 2 Väri 2 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |
|  7 |     asd | Koko2 | 2 Väri 2 |   false | Lisävaihtoehto 1 |   Vaihtoehto 1 |
|  7 |     asd | Koko2 | 2 Väri 2 |   false | Lisävaihtoehto 2 | 2 Vaihtoehto 1 |

应该产生:

| product |  size |    color | storage |                                                       selection |         amount |
|---------|-------|----------|---------|-----------------------------------------------------------------|----------------|
|     asd | Koko2 | 2 Väri 2 |   false | Lisävaihtoehto 1:Vaihtoehto 1, Lisävaihtoehto 2:2 Vaihtoehto 1  |              2 |

希望这会有所帮助。这有点难以解释。

1 个答案:

答案 0 :(得分:0)

尝试COUNT(*)

SELECT DISTINCT p.product, p.size, p.color,p.storage,
GROUP_CONCAT(s.selection, ': ' ,s.option) AS selection,
COUNT(*) as cnt
FROM product p
    INNER JOIN selection s
       ON p.id = s.product_id
WHERE product.id = 123
GROUP BY s.id;
tableTest
+-----------------------------------------------+
| ID | name        | country   | home_city      |
+-----------------------------------------------+
| 1 | AAA          | UK        | Cambridge      |
| 2 | BBB          | Canada    | Toronto        |
| 3 | CCC          | UK        | Leeds          |
| 4 | DDD          | USA       | Newyork        |
+-----------------------------------------------+


SELECT country,count(*) as countryCount
FROM tableTest
GROUP BY country

+-----------------------+
|country  |countryCount |
+-----------------------+
|UK       |  2          |
|Canada   |  1          |
|USA      |  1          |
+-----------------------+