SELECT id HAVING maximum count of id

后端 未结 4 572
暖寄归人
暖寄归人 2020-12-15 22:39

Have a products table with item_id and color_id. I\'m trying to get the color_id with the most non-null instances.

This fails:

SELECT color_id 
           


        
相关标签:
4条回答
  • 2020-12-15 23:17
    SELECT color_id
    FROM
        (
            SELECT  color_id, COUNT(color_id) totalCount
            FROM    products 
            WHERE   item_id = 1234 
            GROUP   BY color_id 
        ) s
    HAVING totalCount = MAX(totalCount)
    

    UPDATE 1

    SELECT  color_id, COUNT(color_id) totalCount
    FROM    products 
    WHERE   item_id = 1234 
    GROUP   BY color_id 
    HAVING  COUNT(color_id) =
    (
      SELECT  COUNT(color_id) totalCount
      FROM    products 
      WHERE   item_id = 1234 
      GROUP   BY color_id 
      ORDER BY totalCount DESC
      LIMIT 1  
    )
    
    • SQLFiddle Demo (having tie)
    0 讨论(0)
  • 2020-12-15 23:18

    To make it simple, use in built function in Oracle(Works only with Oracle Database 11g+ version) :

    select stats_mode(color_id) from so_test 
    

    This would return highest occurrence of colour ids.

    0 讨论(0)
  • 2020-12-15 23:22
    SELECT 
      color_id, 
      COUNT(color_id) AS occurances
    FROM so_test
    GROUP BY color_id
    ORDER BY occurances DESC
    LIMIT 0, 1
    

    Here is a sample fiddle with a basic table that shows it working: sql fiddle

    0 讨论(0)
  • 2020-12-15 23:28
    SELECT color_id AS id, COUNT(color_id) AS count 
    FROM products 
    WHERE item_id = 1234 AND color_id IS NOT NULL 
    GROUP BY color_id 
    ORDER BY count DESC
    LIMIT 1;
    

    This will give you the color_id and the count on that color_id ordered by the count from greatest to least. I think this is what you want.


    for your edit...

    SELECT color_id, COUNT(*) FROM products WHERE color_id = 3;
    
    0 讨论(0)
提交回复
热议问题