Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql查询-按组选择具有特定值的不同值_Sql_Mysql_Group By_Aggregate Functions - Fatal编程技术网

mysql查询-按组选择具有特定值的不同值

mysql查询-按组选择具有特定值的不同值,sql,mysql,group-by,aggregate-functions,Sql,Mysql,Group By,Aggregate Functions,我现在有 SELECT * FROM bidders WHERE status='0' AND email IS NOT NULL GROUP BY `bid_user` ORDER BY 'bid_price' DESC 我遇到的问题是,bid_用户可能存在于状态为1或状态为0的不同行中。 我想知道是否有可能仅选择状态为0且bid\U用户不存在且状态为1的*行以及上述条件,并且电子邮件不为空 按投标用户分组 按“投标价格”说明订购。 我可以使用PHP+2 mysql查询解决这个问题,但

我现在有

SELECT * FROM bidders WHERE status='0' AND email IS NOT NULL GROUP BY `bid_user` ORDER BY 'bid_price' DESC 我遇到的问题是,bid_用户可能存在于状态为1或状态为0的不同行中。 我想知道是否有可能仅选择状态为0且bid\U用户不存在且状态为1的*行以及上述条件,并且电子邮件不为空 按投标用户分组 按“投标价格”说明订购。
我可以使用PHP+2 mysql查询解决这个问题,但是在mysql中使用精确的查询要好得多。

您可以通过将status='0'条件替换为status='0'或status='1'来实现这一点,并且bid_user为NULL

如您所愿*status='0'和email不为NULL的行不使用GROUP by

根据@Michael的评论进行编辑

资料

所需O/p

id  bid_price  bid_user status
3   300        test2      0
SQL查询

   SELECT * FROM bidders 
     WHERE bid_user NOT IN (select DISTINCT `bid_user` FROM `bidders` where status='1') 
       AND email IS NOT NULL 
     ORDER BY 'bid_price' DESC

假设您有关于bid_用户和状态的索引,则有可能表现更好的备选方案:


@salil我忘了添加我使用GROUP BY来获取基于唯一bid\u user的记录我的问题是如何获取状态为0但状态为1的不存在的唯一bid\u user行。@Michael:-你不认为状态为0的bid\u user不能具有状态为1吗,正如你所说的bid\u user是唯一的,如果有,意味着bid\u user不是唯一的吗unique@Salil在投标者表中,我可以有这样一种情况:1 id=1 bid\u price=100 bid\u user=teststatus=0-2 id=2 bid\u price=200 bid\u user=teststatus=1-3 id=3 bid\u price=300 bid\u user=tes2 status=0-因此我需要获得所有bid\u user中不存在的状态为0的行状态为1的行。如果存在2行或多行符合相同bid_用户的条件,我只需要在此处获取一行,我使用GROUP,使用当前语法获取第一行和第三行。但正如您所看到的,我需要排除第一行,因为bid\u user=test存在于状态为1的行中,您能解释一下语法status='0'或status='1',bid\u user为空吗?我不确定我是否理解正确,但它似乎选择了状态为0的行或状态为1且bid_user NULL的行,这不是我要查找的。此查询是否有效?您使用的是GROUP BY,但您选择的是所有字段,没有摘要函数。我认为查询应该使用count,但我对sql查询不太熟悉,因此不知道如何使用它properly@george查询是有效的。我使用GROUP BY只获取具有不同“bid_user”的记录,并按“bid_price”进行排序,但GROUP BY需要知道如何汇总结果集。通常,GROUPBY子句中不存在的任何字段都需要以某种方式进行汇总。所以,我还是不明白为什么它真的有效。这张桌子看起来像什么?SHOW CREATE TABLE bidders命令将提供信息。@George Marian:为了满足您的好奇心,MySQL扩展了GROUP BY-see的使用。这就是为什么Michael的查询从MySQL的角度来看是有效的。
id  bid_price  bid_user status
3   300        test2      0
   SELECT * FROM bidders 
     WHERE bid_user NOT IN (select DISTINCT `bid_user` FROM `bidders` where status='1') 
       AND email IS NOT NULL 
     ORDER BY 'bid_price' DESC
SELECT 
  b.* 
FROM 
  bidders b
WHERE 
  status='0' 
  AND email IS NOT NULL 
  AND not exists (
    select 1 from bidders bx where bx.status='1' and bx.bid_user = b.bid_user
  )
ORDER BY 'bid_price' DESC