2012-10-05 3 views
0

que je dois COUNT() (ou peut-être une autre fonction MySQL) les lignes de ma requête, mais je dois compte diférents, comme ceci:retour SQL COUNT() de lignes séparées par des critères

Ce que je veux:

id | date  | costumer_id 
    -----+------- ----+------------- 
    1 | 2012-10-05 | 103 
    2 | 2012-10-05 | 103 
    3 | 2012-10-05 | 103 
    4 | 2012-10-05 | 59 
    5 | 2012-10-05 | 59 
    6 | 2012-10-05 | 90 

Ce que je besoin:

id | date  | costumer_id | count 
    -----+------------+-------------+------ 
    1 | 2012-10-05 | 103   | 3 
    5 | 2012-10-05 | 59   | 2 
    6 | 2012-10-05 | 90   | 1 
+1

Voulez-vous l'identificateur 'Max()' pour les éléments avec plusieurs Identifiants 'costumer_id'? Vos données sont mélangées le '103' a le min mais le' 59' a le maximum, lequel est correct? – Taryn

+0

@bluefeet il n'y a pas besoin d'un 'id 'exact, en fait cette colonne de table n'existe même pas, c'est juste un exemple ... – BernaMariano

+0

Vous devriez fournir un exemple précis et une explication de ce dont vous avez besoin alors. Parce que ce que vous avez fourni n'était pas clair en raison des divergences de données. – Taryn

Répondre

1

Vous avez besoin d'un simple groupe par requête. Je soupçonne que vous laissez l'identifiant dans le groupe par. Essayez quelque chose comme ceci:

select max(id), date, customer_id, count(*) 
from t 
group by date, customer_id 
order by 1 
0
SELECT id, `date`, customer_id, COUNT(1) AS `count` 
FROM `table` 
GROUP BY `customer_id` 
+0

Je ne voudrais pas promouvoir la sélection de colonnes qui ne sont pas dans le 'GROUP BY' juste parce que MySQL le permet. – Kermit

0

Vous devez utiliser GROUP BY

Ci-dessous la requête vous donnera les résultats souhaités:

select id, date, costumer_id, compter (costumer_id) comme c de groupe table1 par costumer_id ordre par c desc

0
select 
    min(id) as id, 
    date, 
    customer_id, 
    count(*) as count 
from tatble 
group by 
    date, 
    customer_id 
order by 1; 
Questions connexes