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ď č. 1Urobil 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()