/ / MySQL s if - mysql, sql, ktoré majú, s-klauzuly

MySQL má if - mysql, sql, having, having-clause

Mám problémy s MySQL dotazom. Ak je štítok "5", potom chcem len záznamy, v ktorých je viac ako 10 z nich pre aktuálny deň, ale ľubovoľný počet riadkov pre iné štítky. Aký je najlepší spôsob, ako to dosiahnuť v dotaze?

SELECT id,name,label,date
FROM items
GROUP BY DATE("date"), label
HAVING COUNT(id) > 10 IF label = 5

odpovede:

3 pre odpoveď č. 1

Urobil by som to v jedinom dotaze:

SELECT id, name, label, date
FROM items
WHERE date >= date(now()) and date < date(now()) + interval 1 day
GROUP BY label
HAVING (label <> 5) or (COUNT(id) > 10);

Vyzerá to ako najjednoduchšia metóda.


2 pre odpoveď č. 2
SELECT id,name,label,date
FROM items
WHERE label = 5 AND date = NOW()
GROUP BY  label
HAVING COUNT(id) > 10
UNION ALL
SELECT id,name,label,date
FROM items
WHERE  label != 5 AND date = NOW()
GROUP BY label
HAVING COUNT(id) > 0

To vráti neurčité hodnoty pre stĺpce, ktoré nie sú v skupine GROUP BY.


1 pre odpoveď č. 3

Ak správne chápem vašu otázku, tento dotaz vám poskytne to, čo potrebujete.

Tento dotaz funguje len v prípade, že definícia stĺpca „dátum“ musí byť typu dátumu, inak nebude fungovať, ak nezadáte stĺpec „dátum“

SELECT label, COUNT(id) AS total
FROM items
WHERE label = 5 AND date = CURDATE()
GROUP BY label
HAVING COUNT(id) > 10

Otázka je mätúca. na základe vášho komentára skúste to

SELECTs.total, i.* FROM
items AS i
LEFT JOIN (
SELECT label, COUNT(id) AS total
FROM items
WHERE label = 5 AND date = CURDATE()
GROUP BY label
HAVING COUNT(id) > 10
) AS s ON s.label = i.label
WHERE date = CURDATE()