【问题标题】:Sql select query with count带有计数的 Sql 选择查询
【发布时间】:2014-01-21 09:18:36
【问题描述】:

我有一个 fb_requests 表。

我想根据accept_status 选择game_selected 列,如果accept_status count

这是我的创建表代码

CREATE TABLE `fb_requests` (                                              
               `id` int(60) NOT NULL AUTO_INCREMENT,                                   
               `user_id` int(60) DEFAULT NULL,                                         
               `fb_user_id` varchar(255) DEFAULT NULL,                                 
               `request_id` varchar(255) DEFAULT NULL,                                 
               `game_selected` int(60) DEFAULT NULL,                                   
               `accept_status` int(60) DEFAULT NULL COMMENT '0 = pending 1 = accept',  
               `created_date` datetime DEFAULT NULL,                                   
               `modified_date` datetime DEFAULT NULL,                                  
               PRIMARY KEY (`id`)                                                      
             ) ENGINE=MyISAM AUTO_INCREMENT=190 DEFAULT CHARSET=latin1    

试过这个代码。我知道它在语法上不正确,但尝试过。

Select 
    game_selected 
from 
    fb_requests
where 
    user_id = 17 
    && 
    (
        count(accept_status =1) < 4
    ) 
group by 
    game_selected;

提前致谢。

【问题讨论】:

  • 你想看什么?请描述您想要达到的目标。
  • 作为一般规则,CREATE TABLE 代码(以文本形式发布,省略不相关的列)和一些带有示例数据的 INSERT INTO 查询比数据图片更有用,因为它允许潜在的回答者实际测试查询。
  • 我想根据accept_status选择game_selected列,如果accept_status count
  • @Dibish:你能把你的表和数据放在 SQL Fiddle 上吗?根据可用数据获取正确结果会更容易。或者请在此处以插入查询的形式提供您的示例数据,我可以导入。
  • @Dibish:您可以尝试我发布的答案并提供您的反馈。它应该适用于 accept_status 的每个值。

标签: mysql sql select count


【解决方案1】:

您应该将 HAVING sql 语句与聚合函数一起使用
试试这个

Select game_selected from fb_requests
where user_id=17 
group by game_selected
having count(accept_status)<4;

【讨论】:

  • 感谢您的帮助,它的工作,有没有办法只采取 count(accept_status=1)
  • @Dibish 是的,您可以将 WHERE 语句修改为这样,其中 user_id=17 AND accept_status=1
【解决方案2】:

我认为是聚合函数的原因,试试这个。

Select game_selected 
from fb_requests
where user_id=17
group by game_selected
HAVING COUNT(accept_status) < 4;

【讨论】:

  • 非常感谢您的快速回复,我如何选择accept_status=1 具有相同查询的记录?我的意思是我只想计算accept_status=1
【解决方案3】:

请根据您的要求尝试以下查询

Select game_selected,count(accept_status) as as_cnt
    from 
        fb_requests
    where 
        user_id = 17 
    group by 
        game_selected
 having as_cnt < 4;

以下查询仅接受标记为“1”的状态

    Select 
        game_selected,sum(accept_status) as as_cnt
    from 
        fb_requests
   where 
            user_id = 17 
        group by 
            game_selected
     having as_cnt < 4;

【讨论】:

  • 这不起作用。 Where 子句只能使用现有列或现有列的组合(但不能聚合)。好的,我看到你编辑了这个并改用了。
  • @YograjSudewad Sudewad 非常感谢您的代码,在您的第二个查询中我没有得到 accept_status = 1 个计数
  • 第二个查询只计算那些 accept_status = 1 的记录(例如,你有 5 条记录来自 3 条有 accept_status = 1 和 2 条有 accept_status = 0 然后它的返回总和为 3,因为它只计算 accept_status = 1 条记录)
【解决方案4】:

试试这个

    Select game_selected from fb_requests
    where user_id=17 
    group by game_selected
    having count(accept_status)<4;

更新:

    Select game_selected from fb_requests
    where user_id=17 and accept_status=1
    group by game_selected
    having count(accept_status)<4;

【讨论】:

  • 非常感谢您的快速回复,我如何选择accept_status=1 具有相同查询的记录?我的意思是我只想计算accept_status=1
【解决方案5】:

试试下面:

Select fbr1.game_selected,fbr1.* from fb_requests fbr1 JOIN 
(select id,accept_status from fb_requests where accept_status =1 limit 4) fbr2
 ON fbr1.id=fbr2.id where fbr1.user_id = 17;

如果您不是在寻找从上述查询中获取的结果,请告诉我。

【讨论】:

  • 感谢您的回答。没试过。我会试试的,让你知道。下面的答案对我有用,这就是为什么我没有尝试这个答案。感谢您的帮助
【解决方案6】:

从 fb_requests 中选择 game_selected,其中 user_id=17 按 game_selected 的计数(accept_status)

【讨论】:

  • 非常感谢您的快速回复,我如何选择accept_status=1 具有相同查询的记录?我的意思是我只想计算accept_status=1
猜你喜欢
  • 1970-01-01
  • 2016-08-24
  • 2023-03-12
  • 2017-08-14
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2021-03-26
  • 2012-07-05
相关资源
最近更新 更多