【问题标题】:Mysql query to select Distinct Records on conditions?Mysql查询以在条件下选择不同的记录?
【发布时间】:2018-10-16 16:41:49
【问题描述】:

我有这样的表结构..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;

【问题讨论】:

  • 你试过什么??? SO 不是免费的编码服务网站。您发布您的查询。如果它不起作用,我们可以尝试帮助您。
  • @Eric 是的,我试过了..我已经编辑了我的问题..
  • @Eric 如何修改此答案..如果我想选择所有值为零的记录..我的意思是不区分或分组..我想选择所有记录..具有价值仅为零...

标签: mysql select distinct distinct-values


【解决方案1】:

count 跳过 null 值。所以你可以count一个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 的记录.. 这样我可以更新或删除该记录..如何修改此答案..我尝试使用 order by.. 但它显示错误..
  • @user10146017 如果您有新的要求,请将它们作为新问题发布
  • 确定.. here
【解决方案2】:

你可以试试这个,使用 group byhaving 子句:

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

【讨论】:

  • 这将返回具有零的ext_nos 并省略具有不同值的行。 OP 要求“如果且仅当所有 ext_no 值为零时”
【解决方案3】:

试试这个

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多