Mysql 根据条件查询 select 不同的记录?
Mysql query to select Distinct Records on conditions?
我有 table 这样的结构.. ext_no
, value
..我想 select 条件不同的记录..就像 [= 计数时15=] 是 多于两个 和 当且仅当 所有 ext_no
value
为零..
我想要下面给出的预期结果......比如..如何写mysql查询这个......?任何帮助将不胜感激..提前致谢..
Table 结构:
CREATE TABLE `test` (
`ext_no` int(5) default NULL,
`value` int(3) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `test`
--
INSERT INTO `test` (`ext_no`, `value`) VALUES
(12133, 0),
(12133, 0),
(12133, 0),
(22222, 0),
(44226, 0),
(44226, 0),
(44226, 1),
(44226, 2),
(99902, 1),
(99902, 2),
(99902, 3),
(11505, 0),
(11505, 0),
(11505, 0),
(11505, 0);
预期结果:
ext_no value
12133 0
11505 0
编辑:我试过了-
select distinct ext_no, value from test where value ='0' order by ext_no DESC;
你可以试试这个,使用 group by 和 having 子句:
SELECT
ext_no,
SUM(value) as value
FROM
test
GROUP BY
ext_no
HAVING
count(*) > 2 AND SUM(value) = 0
count
跳过 null
值。所以你可以 count
一个值为 0
的 case
表达式,然后使用 having
条件来检查这个计数是否等于总计数:
SELECT ext_no, MAX(value)
FROM test
GROUP BY ext_no
HAVING COUNT(*) > 2 AND
COUNT(*) = COUNT(CASE value WHEN 0 THEN 1 END)
试试这个
SELECT t.ext_no, COUNT(*)
FROM test t
WHERE NOT EXISTS (
SELECT 1
FROM test
WHERE ext_no = t.ext_no AND ext_no > 0
)
GROUP BY t.ext_no
HAVING COUNT(*) > 2
我有 table 这样的结构.. ext_no
, value
..我想 select 条件不同的记录..就像 [= 计数时15=] 是 多于两个 和 当且仅当 所有 ext_no
value
为零..
我想要下面给出的预期结果......比如..如何写mysql查询这个......?任何帮助将不胜感激..提前致谢..
Table 结构:
CREATE TABLE `test` (
`ext_no` int(5) default NULL,
`value` int(3) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `test`
--
INSERT INTO `test` (`ext_no`, `value`) VALUES
(12133, 0),
(12133, 0),
(12133, 0),
(22222, 0),
(44226, 0),
(44226, 0),
(44226, 1),
(44226, 2),
(99902, 1),
(99902, 2),
(99902, 3),
(11505, 0),
(11505, 0),
(11505, 0),
(11505, 0);
预期结果:
ext_no value
12133 0
11505 0
编辑:我试过了-
select distinct ext_no, value from test where value ='0' order by ext_no DESC;
你可以试试这个,使用 group by 和 having 子句:
SELECT
ext_no,
SUM(value) as value
FROM
test
GROUP BY
ext_no
HAVING
count(*) > 2 AND SUM(value) = 0
count
跳过 null
值。所以你可以 count
一个值为 0
的 case
表达式,然后使用 having
条件来检查这个计数是否等于总计数:
SELECT ext_no, MAX(value)
FROM test
GROUP BY ext_no
HAVING COUNT(*) > 2 AND
COUNT(*) = COUNT(CASE value WHEN 0 THEN 1 END)
试试这个
SELECT t.ext_no, COUNT(*)
FROM test t
WHERE NOT EXISTS (
SELECT 1
FROM test
WHERE ext_no = t.ext_no AND ext_no > 0
)
GROUP BY t.ext_no
HAVING COUNT(*) > 2