Mysql запрос, чтобы выбрать отличительные записи на условиях? - PullRequest
0 голосов
/ 16 октября 2018

У меня есть такая структура таблицы .. ext_no, value .. Я хочу выбрать отдельные записи при условии .. например, когда число ext_no равно больше, чем два и ЕСЛИ И ТОЛЬКО ЕСЛИ все, что ext_no value равно нулю .. Я хочу ожидаемый результат, приведенный ниже ... например .. как написать запрос mysql в этом это ..?любая помощь будет оценена .. Заранее спасибо ..

Структура таблицы:

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;

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

count пропускает null значения.Таким образом, вы можете count a case выражение, где значение равно 0, а затем использовать условие 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)
0 голосов
/ 16 октября 2018

Попробуйте это

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
0 голосов
/ 16 октября 2018

Вы можете попробовать это, используя group by и , имеющие предложение:

SELECT
    ext_no,
    SUM(value) as value
FROM
    test
GROUP BY
    ext_no
HAVING
    count(*) > 2 AND SUM(value) = 0
...