[英]MYSQL SELECT unique values from column where column2 = value & count how many times each unique value was found
[英]How to select unique value from many to many mysql relationship
嗨,我在這個 sql 案例中感到困惑。 我正在使用mysql Ver 15.1 Distrib 10.2.31-MariaDB
。 假設我有 3 個表products
、 categories
和product_categories
作為數據透視表。
以下是數據示例:
products:
| id | name |
------------------------
| 1 | asd wef |
| 2 | gggg2222 |
| 3 | pppga 99 |
| 4 | lalala 55 |
對於類別:
| id | level | parent_id | name |
-----------------------------------
| 20 | 1 | | Fashion |
| 22 | 2 | 20 | Top |
| 23 | 3 | 22 | T-Shirt |
| 24 | 3 | 22 | Jacket |
對於數據透視表,product_categories:
| product_id | category_id |
--------------------------------
| 1 | 20 |
| 1 | 22 |
| 1 | 23 |
| 2 | 22 |
| 2 | 20 |
| 3 | 20 |
| 4 | 20 |
因此,從數據透視表中可以看出,只有product_id = 3 & 4
停止在類別級別 1 中。而product_id = 2
僅停止在類別級別 2 中。
我想在這里實現的是當我從categories
表中選擇時。 我可以數出有多少產品停在這里。 這是我想要獲取的數據示例。
"categories": [
{
"id": 20,
"total_product": 4
"stopped_product": 2
},
{
"id": 22,
"total_product": 3
"stopped_product": 1
}
]
到目前為止,我嘗試使用group by
:
SELECT * FROM product_categories WHERE product_id IN (1, 2, 3, 4) GROUP BY product_id HAVING category_id=20
輸出:
| product_id | category_id |
--------------------------------
| 1 | 20 |
| 3 | 20 |
| 4 | 20 |
預期產出
| product_id | category_id |
--------------------------------
| 3 | 20 |
| 4 | 20 |
我猜你只想要最大值
SELECT product_id,MAX(category_id) as category_id FROM product_categories WHERE product_id IN (1, 2,
3, 4)
GROUP BY product_id
HAVING category_id=20
您可以使用 CTE 為每個產品生成停止類別列表,然后將其JOIN
categories
和product_categories
表以計算每個類別的產品總數和停止產品數量:
WITH prods AS (
SELECT product_id, MAX(category_id) AS stop_cat
FROM product_categories
GROUP BY product_id
)
SELECT c.id AS category_id,
COUNT(DISTINCT pc.product_id) AS total_product,
SUM(c.id = p.stop_cat) AS stopped_product
FROM categories c
JOIN product_categories pc ON pc.category_id = c.id
JOIN prods p ON p.product_id = pc.product_id
GROUP BY c.id
輸出(對於您的樣本數據)
category_id total_product stopped_product
20 4 2
22 2 1
23 1 1
您可以在此處找到按類別分類的產品數量和 ID:
SELECT c.name as categoryName, c.level, COUNT(pc.product_id) as productCount, GROUP_CONCAT(pc.product_id) as productIds
FROM product_categories pc JOIN categories c ON c.id = pc.category_id
WHERE 1
GROUP by c.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.