Compter sur DISTINCTS de plusieurs champs de travailler uniquement sur MySQL?
J'ai besoin d'une Requête qui, sans aucun changement à ces trois différentes serveur de base de données : MySQL, MSSQL, PostgreSQL .
Dans cette requête, je dois calculer une colonne avec l'expression suivante qui fonctionne correctement sur MySQL :
COUNT(DISTINCT field_char,field_int,field_date) AS costumernum
Les champs dans l'distincts, sont de type différent :
field_char = character
field_int = integer
field_date = datetime
L'expression est à l'intérieur d'un parent requête select, donc si j'essaie d'atteindre le résultat avec une sous-requête approche, que j'ai découvert dans cette situation :
SELECT t0.description,t0.depnum
(select count(*) from (
select distinct f1, f2, f3 from salestable t1
where t1.depnum = t0.depnum
) a) AS numitems
FROM salestable t0
J'obtiens une erreur avec cette requête, comment puis-je obtenir la valeur de la requête parent ?
L'expression fonctionner correctement sur MySQL mais j'obtiens une erreur lorsque je tente de l'exécuter sur le Serveur Sql server ou PostgreSQL (le problème est que la fonction de comptage n'accepte pas les 3 arguments de type différent sur MYSQL/PostgreSQL), il est un moyen d'obtenir le même résultat avec une expression qui est à l'œuvre dans chacune de ces serveur de base de données (SQL Server, MySQL, PostgreSQL ) ?
OriginalL'auteur aleroot | 2011-09-02
Vous devez vous connecter pour publier un commentaire.
Une manière générale, pour ce faire sur n'importe quelle plateforme est comme suit:
Modifier pour de nouvelles infos:
Que si vous essayez de vous joindre à la liste distincte (y compris le dept) et ensuite de faire le comte? J'ai créé quelques données de test et cela semble fonctionner. Assurez-vous que le
COUNT
est sur l'un des t1 colonnes - sinon, il sera, à tort, de retour de 1 au lieu de 0 lorsqu'il n'existe aucune entrée correspondante dans le tableau t1.Je vois, édité le post pour répondre à des exigences supplémentaires.
Semble que c'est le travail, mais sur MySQL est extrêmement lent, je ne sais pas pourquoi, dans l'autre serveur de base de travail assez vite ... connaissez-vous une solution ?
Rien en soi, sans essayer d'ajouter des index, etc.
OriginalL'auteur Derek Kromm
Comment sur la concaténation?
Mise à jour
Apparemment, l'opérateur de concaténation de la portabilité est question par lui-même:
J'ai essayé de vous aider avec la
distinct
question.Cast fonctionne correctement mais je ne peux pas utiliser la même requête pour chaque base de données : Mysql, PostgreSQL, MSSQL, parce que la syntaxe pour la concaténation de chaîne est différente entre ces serveur de base de données ...
OriginalL'auteur Adrian Carneiro