sql >> Database >  >> RDS >> Mysql

MySQL - Voorwaardelijke COUNT met GROUP BY

Als droid_v alleen 0, 1, 2, 3 of 4 kan zijn, dan zal COUNT(DISTINCT) nooit meer dan 5 retourneren, omdat er maar vijf mogelijke waarden zijn. Is dat wat je wilt? Zo ja, probeer dan dit:

SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v ELSE 0 END) - 1 AS droid /* -1 for the case where droid_v is 0 */
     , COUNT(DISTINCT sig_v) AS sig
     , SUM(NoExt)  AS hits

Bijwerken: Oeps, sorry, het bovenstaande is niet helemaal juist omdat er misschien niet zijn een nul. Het zou moeten zijn:

SELECT puid, COUNT(DISTINCT CASE WHEN droid_v > 0 THEN droid_v END) AS droid

Als je daarentegen een telling wilt van alle rijen met droid_v> 0, dan denk ik dat je dit wilt:

SELECT puid, SUM(CASE WHEN droid_v > 0 THEN 1 ELSE 0 END) AS droid
     , COUNT(DISTINCT sig_v) AS sig
     , SUM(NoExt)  AS hits

Ik hoop dat dit helpt.



  1. Ondersteunt transacties, vergrendeling op rijniveau en externe sleutels

  2. PostgreSQL-tekst [][]-type en Java-type toewijzen

  3. SSMS wordt nu geleverd met Azure Data Studio

  4. Hoe u uw Access-databases ultrasnel kunt maken!