gpt4 book ai didi

php - 获取非重复记录的最大值

转载 作者:行者123 更新时间:2023-12-05 05:42:24 27 4
gpt4 key购买 nike

这可能吗?我有下表:

<表类="s-表"><头>第 1 列第二列col3<正文>代码1美国9代码105代码2美国4代码2011代码3011

我正在尝试通过 col1 和 col2 过滤更高的 col3 值我现在的尝试是:

SELECT MAX(col3), col2, col1, count(col1) FROM `mytable` WHERE (col1 IN ('code1', 'code2') ) AND ((col2 = 'US') OR (col2 = '0')) GROUP BY col1;

我的结果:

<表类="s-表"><头>第 1 列第二列col3计数(col1)<正文>代码1美国92代码20112

但我需要的是,如果两个代码都有一个值等于“US”的 col2,则从中返回较高的 col3 值并忽略带有“0”的值

<表类="s-表"><头>第 1 列第二列col3计数(col1)<正文>代码1美国92

或者如果其中一个代码只有一行且 col2 等于 '0',则比较 code1 = 'US' 和 code2 = '0'

<表类="s-表"><头>第 1 列第二列col3<正文>代码1美国9代码105代码2011代码3011

给出结果:

<表类="s-表"><头>第 1 列第二列col3计数(col1)<正文>代码20112

是否可以通过 mysql 查询来实现?还是我应该使用 php?

提前谢谢你。

最佳答案

您有非常具体的 where 子句,因此您需要像在主选择中一样在子选择中重复它们

随着你的需求越来越复杂,你必须增加subselect的数量来满足你的要求,ORDER BYs决定被选中的行。

Followimg 为您提供结果,随着您添加越来越多的障碍物,您也必须在代码中执行此操作

CREATE TABLE tab1 (
`Col1` VARCHAR(5),
`Col2` VARCHAR(2),
`col3` INTEGER
);

INSERT INTO tab1
(`Col1`, `Col2`, `col3`)
VALUES
('code1', 'US', '9'),
('code1', '0', '5'),
('code2', 'US', '4'),
('code2', '0', '11'),
('code3', '0', '11');
SELECT * FROM tab1 WHERE col3 = 
(SELECT MAX(col3) FROM tab1 WHERE (col1 IN ('code1', 'code2') ) AND ((col2 = 'US') OR (col2 = '0')))
AND (col1 IN ('code1', 'code2') ) AND ((col2 = 'US') OR (col2 = '0'))
ORDER BY col1,col2 DESC
LIMIT 1
Col1  | Col2 | col3:---- | :--- | ---:code2 | 0    |   11
SELECT
col1,col2,col3
FROM
(SELECT
`Col1`, `Col2`, `col3`,
ROW_NUMBER() OVER(ORDER BY col2 DESC,col3 DESC) rn2
FROM(
SELECT
* ,ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col3 DESC) rn
FROM tab1) t1
WHERE rn = 1) t2
WHERE rn2 = 1
col1  | col2 | col3:---- | :--- | ---:code1 | US   |    9
CREATE TABLE tab2 (
`Col1` VARCHAR(5),
`Col2` VARCHAR(2),
`col3` INTEGER
);

INSERT INTO tab2
(`Col1`, `Col2`, `col3`)
VALUES
('code1', '0', '5'),
('code2', 'US', '4'),
('code2', '0', '11'),
('code3', '0', '11');
SELECT
col1,col2,col3
FROM
(SELECT
`Col1`, `Col2`, `col3`,
ROW_NUMBER() OVER(ORDER BY col2 DESC,col3 DESC) rn2
FROM(
SELECT
* ,ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col3 DESC) rn
FROM tab2) t1
WHERE rn = 1) t2
WHERE rn2 = 1
col1  | col2 | col3:---- | :--- | ---:code2 | 0    |   11

db<> fiddle here

关于php - 获取非重复记录的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72049885/

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