gpt4 book ai didi

mysql - 通过语句获取group中的某个值

转载 作者:行者123 更新时间:2023-11-29 04:32:35 25 4
gpt4 key购买 nike

我有以下三行数据:

id       price          type
1 19.99 PERM
1 30.13 TEMP
2 14.44 SOME

我想按 id 分组并获取价格,TEMP 价格一直存在,将其用作默认值。这是输出应该是什么的示例:

id        price
1 30.13
2 14.44

到目前为止,我一直停留在分组依据:

SELECT 
GROUP_CONCAT(tp.price_value order by tp.price_type='temp' desc limit 1)
FROM prices GROUP BY id

上面的price(order by, limit 1)如何优先?

我现在的两个想法是做两个查询(联合似乎有点矫枉过正?!)或者用编程语言对 group_concat 进行后处理。两者似乎都不太理想,所以希望这里有更好、更简单的方法。

最佳答案

您可以使用带有 MAXGROUP BY 来使用以下解决方案:

SELECT id, IFNULL(maxTemp, maxOther) AS maxPrice
FROM (
SELECT id,
MAX(CASE WHEN type = 'TEMP' THEN price ELSE NULL END) maxTemp,
MAX(CASE WHEN type <> 'TEMP' THEN price ELSE NULL END) maxOther
FROM table_name
GROUP BY id
)t;

此解决方案应为您提供满足您要求的正确结果(ORDER BY ... DESC LIMIT 1)。


但你也可以使用其他的aggregate functions获取价格值的 SUM 或列表(使用 GROUP_CONCAT)。

获取价格值的 SUM 的解决方案:

SELECT id, IFNULL(sumTemp, sumOther) AS sumPrice
FROM (
SELECT id,
SUM(CASE WHEN type = 'TEMP' THEN price ELSE NULL END) sumTemp,
SUM(CASE WHEN type <> 'TEMP' THEN price ELSE NULL END) sumOther
FROM table_name
GROUP BY id
)t;

... 或使用 GROUP_CONCAT 函数获取价格值列表:

SELECT id, IFNULL(gTemp, gOther) AS listPrice
FROM (
SELECT id,
GROUP_CONCAT(CASE WHEN type = 'TEMP' THEN price ELSE NULL END) gTemp,
GROUP_CONCAT(CASE WHEN type <> 'TEMP' THEN price ELSE NULL END) gOther
FROM table_name
GROUP BY id
)t;

demo on dbfiddle.uk

关于mysql - 通过语句获取group中的某个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55823328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com