J'ai une table qui stocke les informations de transaction. Chaque transaction possède une colonne d'identifiant unique (auto incrémentée), une colonne avec le numéro d'identification du client, une colonne appelée bill_paid
qui indique si la transaction a été payée par le client avec un oui ou un non, et quelques autres colonnes qui contiennent d'autres informations non pertinentes à ma question. Je veux sélectionner tous les identifiants de client de la table de transaction pour laquelle la facture n'a pas été payée, mais si le client a eu plusieurs transactions où la facture n'a pas été payée, je ne veux pas les sélectionner plus d'une fois. De cette façon, je peux générer une facture de client unique avec toutes les transactions qu'ils doivent au lieu d'une facture séparée pour chaque transaction. Comment pourrais-je créer une requête qui a fait ça pour moi?Sélectionnez les enregistrements pour MySQL une seule fois en fonction d'une valeur de colonne
Répondre
retours exactement un customer_id
pour chaque client avec bill_paid
égal à 'non':
SELECT
t.customer_id
FROM
transactions t
WHERE
t.bill_paid = 'no'
GROUP BY
t.customer_id
Edit:
GROUP BY
votre résume ResultSet.
Avertissement: Chaque colonne sélectionnée doit être «groupée par» ou agrégée d'une certaine manière. Comme le montre nikic vous pouvez utiliser SUM
pour obtenir le montant total dû, par exemple .:
SELECT
t.customer_id
, SUM(t.amount) AS TOTAL_OWED
FROM
transactions AS t
WHERE
t.bill_paid = 'no'
GROUP BY
t.customer_id
t
est tout simplement un alias.
Ainsi, au lieu de taper des transactions partout, vous pouvez maintenant taper t
. L'alias n'est pas nécessaire ici puisque vous interrogez seulement une table, mais je les trouve inestimables pour les requêtes plus volumineuses. Vous pouvez éventuellement taper AS
pour indiquer plus clairement que vous utilisez un alias.
Vous pouvez essayer l'opérateur Group By, par ex. Groupe par le client.
Merci pour votre réponse, «group by» est ce que je cherchais, mais @Adam Bernier l'a expliqué plus en détail. – ubiquibacon
SELECT customer, SUM(toPay) FROM .. GROUP BY customer
Comment cela exclut-il les colonnes bill_paid = yes? – Konerak
Merci pour votre réponse, mais comme @Konerak l'a fait remarquer, cela ne tient pas compte du statut de 'bill_paid'. – ubiquibacon
- 1. accès - Sélectionnez les enregistrements distincts où une seule colonne est distincte
- 2. Indexation d'une seule valeur de colonne MySQL
- 3. PHP/MYSQL Obtenir une seule valeur de colonne par ID
- 4. Sélectionnez parmi les enregistrements MySQL qui résument
- 5. MySQL: insertions multiples pour une seule colonne
- 6. Sélectionnez les enregistrements dont les valeurs sont égales ou supérieures à (mais une seule sur) une autre valeur?
- 7. Sélectionnez une ligne pour chaque valeur différente de la colonne, MySQL
- 8. Aide requête MySQL pour sélectionner uniquement les enregistrements ayant une valeur spécifique dans la colonne
- 9. Comment convertir les enregistrements IP a.b.c.d à une valeur IP en utilisant une fonction dans MySQL?
- 10. Sélectionner les enregistrements multiples en fonction de la valeur de colonne d'un enregistrement
- 11. sql sélectionnez plusieurs lignes dans une seule colonne
- 12. Sélectionnez * dans Table et effectuez toujours une fonction sur une seule colonne nommée
- 13. MySQL, sélectionnez les enregistrements avec au moins X caractères correspondants
- 14. Sélectionnez les enregistrements qui échouent la colonne varchar à bigint
- 15. Sélectionnez la même colonne plusieurs fois
- 16. MYSQL - une colonne par élément de données ou de combiner en une seule colonne
- 17. En utilisant Jquery, appelez une seule fois la fonction
- 18. Tri des tables deux fois en une seule fonction - Lua
- 19. Sélectionnez une colonne dynamiquement en utilisant LINQ?
- 20. MYSQL Sélectionnez 5 enregistrements d'une table en fonction de plusieurs valeurs différentes d'une autre
- 21. Convertir une seule valeur en plusieurs lignes
- 22. Sélectionnez les données en fonction de l'horodatage et de l'intervalle de mysql
- 23. La fonction jQuery en .attr est appelée une seule fois pour toutes les balises correspondantes
- 24. MySQL, sélectionnez la table si un mot apparaît plusieurs fois dans une colonne
- 25. MySQL join - Sélectionnez la table en fonction de la condition
- 26. Reliure une seule colonne
- 27. Sélectionnez une colonne factice avec une valeur factice dans SQL?
- 28. MYSQL - sélectionnez les 4 premiers enregistrements pour chaque catégorie dans une table
- 29. MySQL colonne Valeur Pivot
- 30. MySQL retourne une valeur différente en fonction de l'emplacement GEO?
Puisque je ne suis pas un ninja MySQL, est-ce que vous pourriez le décomposer un peu plus pour moi? Plus précisément, que représente le «t»? Aussi, que font les 'transactions '? – ubiquibacon
@typoknig: bien sûr. S'il vous plaît voir modifier. – bernie
Merci, je suis en train de tout mettre ensemble maintenant et il semble que ça va marcher. Laissez-moi vous demander ceci, est-il mal vu d'utiliser PHP pour calculer mes totaux au lieu de la fonction MySQL 'SUM()'? Je veux rester fidèle aux «bonnes pratiques» mais j'ai pensé qu'il serait plus facile de faire mes calculs avec PHP puisque les factures que je génère sont détaillées. – ubiquibacon