【问题标题】:mySQL order by count subquery troublemySQL order by count 子查询麻烦
【发布时间】:2012-08-10 15:29:22
【问题描述】:

我有一个名为 items_status 的表,它有 3 个字段,item_id、user_id 和 status,可以是“拥有”或“想要”。

Field   Type                Null    Key 
user_id varchar(10)         NO      PRI     
item_id varchar(10)         NO      PRI     
status  set('have','want')  YES     NULL

我有一个页面,我想在其中获取表中所有用户 ID 的列表,该列表按状态为“拥有”的表中与用户 ID 关联的记录数排序。到目前为止,这是我能想到的最好的:

SELECT user_id 
FROM items_status AS is  
ORDER BY 
    //Subquery to get number of items had by user
    (SELECT COUNT(i.item_id) 
          FROM items_status AS i 
          WHERE i.user_id = is.user_id AND i.status = 'have') DESC
GROUP BY user_id 

但是,这会在子查询中引发错误。如何获取表中的所有用户 ID,按他们拥有的项目数排序?

【问题讨论】:

    标签: mysql count subquery


    【解决方案1】:

    你可以这样做:

    SELECT  user_id
    FROM    items_status
    WHERE   `status` = 'have'
    GROUP BY userID
    ORDER BY COUNT(user_id) DESC
    

    SQLFiddle Demo

    列名略有不同但查询相同

    【讨论】:

    • 我喜欢它的简单和直观,我不敢相信我没有想到它。谢谢!
    • 不客气,jaimerump。只是亲吻(保持简单的水手
    【解决方案2】:
    SELECT user_id, SUM(CASE WHEN i.status = 'have' THEN 1 ELSE 0) AS s
    FROM items_status AS is
    GROUP BY user_id
    ORDER BY  SUM(CASE WHEN i.status = 'have' THEN 1 ELSE 0) DESC 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 2012-05-06
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      相关资源
      最近更新 更多