gpt4 book ai didi

sql问题,挑战

转载 作者:行者123 更新时间:2023-12-02 07:54:01 25 4
gpt4 key购买 nike

我想得到

id   a    b     c
--------------------
1 1 100 90
6 2 50 100

...来自:

id   a    b     c
--------------------
1 1 100 90
2 1 300 50
3 1 200 20
4 2 200 30
5 2 300 70
6 2 50 100

它是被 a 分组的 b 最小的行。

用sql怎么做?

编辑

我以为可以通过

select * from table group by a having min(b);

后来发现不对

但是可以用 having 语句来实现吗?

我正在使用 MySQL

最佳答案

SELECT t1.*
FROM mytable t1
LEFT OUTER JOIN mytable t2
ON (t1.a=t2.a AND t1.b>t2.b)
WHERE t2.a IS NULL;

这是可行的,因为不应该有具有相同 a 和较小的 b 的匹配行 t2


更新:这个解决方案与其他人已经确定的关系有同样的问题。但是,我们可以打破联系:

SELECT t1.*
FROM mytable t1
LEFT OUTER JOIN mytable t2
ON (t1.a=t2.a AND (t1.b>t2.b OR t1.b=t2.b AND t1.id>t2.id))
WHERE t2.a IS NULL;

假设在平局的情况下,具有较低 id 的行应该是我们选择的行。


这并不能解决问题:

select * from table group by a having min(b);

因为 HAVING MIN(b) 只测试组中的最小值不为假(在 MySQL 中意味着不为零)。 HAVING 子句中的条件用于从结果中排除组,而不是用于选择要返回的组中的行。

关于sql问题,挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1960621/

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