使用此查詢,我可以生成以下結果:
SELECT product_group_id, product_id, product_price, product_description
FROM product_group_table
JOIN product ON product.id = product_id;
| product_group_id | 產品編號 | 產品價格 | 產品描述 |
|---|---|---|---|
| 4 | 1 | 15 | 邏輯推理 1 |
| 4 | 2 | 10 | 迷幻藥 2 |
| 5 | 3 | 24 | 魔幻3 |
| 4 | 4 | 30 | Loremipsum 4 |
我想要的輸出如下:
| product_group_id | 產品編號 | 產品價格 | 產品描述 |
|---|---|---|---|
| 4 | 4 | 30 | Loremipsum 4 |
| 5 | 3 | 24 | 魔幻3 |
我在哪里獲得每組價格最高的產品的詳細資訊。我用查詢試了一下:
SELECT product_group_id, product_id, MAX(product_price) AS product_price, product_description
FROM (SELECT product_group_id, product_id, product_price, product_description
FROM product_group_table
JOIN product ON product.id = product_id)
AS product_group_table
GROUP BY product_group_id;
但它產生以下結果。
| product_group_id | 產品編號 | 產品價格 | 產品描述 |
|---|---|---|---|
| 4 | 1 | 30 | 邏輯推理 1 |
| 5 | 3 | 24 | 魔幻3 |
uj5u.com熱心網友回復:
實作此目的的另一種方法是使用SUB-QUERY和JOINS。此方法也適用于大多數最舊的版本MySQL:
SELECT pg.product_group_id, pg.product_id, pg.product_price, pg.product_description
FROM
(
SELECT product_group_id, product_id, product_price, product_description
FROM product_group_table
JOIN product ON product.id = product_id
)AS pg
INNER JOIN
(
SELECT product_group_id, MAX(product_price) AS mx_price
FROM
(
SELECT product_group_id, product_id, product_price, product_description
FROM product_group_table
JOIN product ON product.id = product_id
) sq
GROUP BY product_group_id
) AS mx
ON pg.product_group_id = mx.product_group_id
AND pg.product_price = mx.mx_price
ORDER BY pg.product_group_id;
關于db<>fiddle 的 演示在這里
uj5u.com熱心網友回復:
假設您使用 MySQL 8 ,一種規范方法使用ROW_NUMBER:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY pgt.product_group_id
ORDER BY p.product_price DESC) rn
FROM product_group_table pgt
INNER JOIN product p ON pgt.product_id = p.id
)
SELECT product_group_id, product_id, product_price, product_description
FROM cte
WHERE rn = 1;
uj5u.com熱心網友回復:
我使用的是 MySql 版本 5。這個問題可以通過從一種資料型別轉換為另一種資料型別來解決。查詢如下。這是作業。我假設表名是 PRODUCT。
SELECT A.PRODUCT_GROUP_ID,A.PRODUCT_ID,A.PRODUCT_PRICE,A.PRODUCT_DESCRIPTION
FROM PRODUCT A
WHERE CONCAT(TRIM(CAST(A.PRODUCT_GROUP_ID AS CHAR(10))),'-',TRIM(CAST(A.PRODUCT_PRICE AS CHAR(10)))) IN
(
SELECT CONCAT(TRIM(CAST(B.PRODUCT_GROUP_ID AS CHAR(10))),'-',TRIM(CAST(MAX(B.PRODUCT_PRICE) AS CHAR(10))))
FROM PRODUCT B
GROUP BY B.PRODUCT_GROUP_ID
)
ORDER BY A.PRODUCT_GROUP_ID,A.PRODUCT_ID;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/377400.html
上一篇:使用多個AND條件查詢
