【问题标题】:Order by a columns count where another column has a static value按列计数排序,其中另一列具有静态值
【发布时间】:2017-04-06 10:51:33
【问题描述】:

我有一个存储用户项目的表,我想在此查询中使用的两个关键列是 user_iditem_id。示例中的 id 字段不是必需的,只是添加以显示这些不是表中仅有的两列。

---------------------- id user_id item_id ---------------------- 1 1 324 2 1 324 3 3 324 4 2 230 5 4 324

我要构建的查询应该返回前 10 个拥有最多具有特定项目 ID 的项目的用户。

例如,如果我想针对项目 ID 324 运行查询,我应该得到以下结果。

------------------ user_id item_count ------------------ 1 2 3 1 4 1 2 0

【问题讨论】:

  • 你应该使用 group by (但是为什么 user_2 item_count = 0 ...? 也应该是 1)
  • 和一个COUNT()函数
  • 你真的想要第 4 行的计数为零吗?
  • 我想第四行不需要说实话

标签: php mysql sql database count


【解决方案1】:

试试这个

select user_id , count(*) as item_count from table 
where item_id = 324 group by user_id order by item_count desc limit 10

limit 10 将显示前 10 名用户,并按 desc 从高到低排序。

但是,根据您的问题,上述查询不会为您提供 0 计数。如果你真的想要零计数,你可以试试这个:(假设你的表名是用户列表)

SELECT distinct user_id, 
(select 
   count(*) from `userlist` 
   where user_id=u.user_id and item_id=324
) as item_count FROM `userlist` u 
order by item_count desc

【讨论】:

    【解决方案2】:

    我无法在本地创建数据库,但我认为这样可以解决问题

    SELECT user_id, COUNT(item_id) as item_count 
    FROM TABLE_NAME
    WHERE item_id = 324
    GROUP BY item_id 
    ORDER BY item_count;
    

    【讨论】:

      猜你喜欢
      • 2018-10-23
      • 2021-06-10
      • 2018-09-27
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 2016-03-24
      相关资源
      最近更新 更多