revo
revo

Reputation: 48751

Group rows count besides latest record

I can have a group by clause which returns latest record of each group in the way this query is running:

select `id`, `user_id`, `type`, `product_id`
    from `table` where `id` in 
        (select max(`id`) from `table` where `product_id`=1 group by `type`)
order by `id` group by `type`

But also I want to have number of rows within each group that is counted in a normal group by query.

+----------+-------------------------------------------------+
|   type   | select count(1) where type=:type group by type; |
+----------+-------------------------------------------------+
|   one    |                        5                        |
+----------+-------------------------------------------------+
|   two    |                        1                        |
+----------+-------------------------------------------------+
|   three  |                        109                      |
+----------+-------------------------------------------------+

Is it possible to have these numbers as well?

Upvotes: 4

Views: 38

Answers (1)

sagi
sagi

Reputation: 40481

You can do it with a JOIN :

SELECT t.id,t.user_id,t.type,t.product_id,s.cnt
FROM YourTable t
INNER JOIN (SELECT p.type,max(p.id) as max_id,count(*) as cnt
            FROM YourTable p
            WHERE p.product_id = 1
            GROUP BY p.type) s
 ON(t.id = s.max_id)
WHERE t.product_id = 1

Now the derived table s will contain for each type the max(id) and the count , and by joining to it , it will filter all the other records.

Upvotes: 2

Related Questions