Ich habe eine Tabellenstruktur ( notes_subject ) -

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int         | NO   | PRI | NULL    | auto_increment |
| user_id      | int         | NO   |     | NULL    |                |
| note_id      | varchar(25) | NO   | MUL | NULL    |                |
| subject_name | text        | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

Und in dieser Tabelle gespeicherte Daten -

+----+---------+--------------+--------------+
| id | user_id | note_id      | subject_name |
+----+---------+--------------+--------------+
| 10 |       2 | UdMs870BSswp | CN           |
| 12 |       2 | 8stMvslwIGr2 | CN           |
| 13 |       2 | PB3KNbbFkaUm | cn           |
+----+---------+--------------+--------------+

Hinweis: CN und cn (Kleinbuchstaben) sind unterschiedlich.

Ich möchte das Auftreten jedes subject_name nach user_id in dieser Tabelle zählen. Also führe ich eine Abfrage aus -

SELECT subject_name, COUNT(subject_name) 
FROM notes_subject where user_id=2 GROUP BY subject_name;

Und es holte -

+--------------+---------------------+
| subject_name | COUNT(subject_name) |
+--------------+---------------------+
| CN           |                   3 |
+--------------+---------------------+

Dies ist jedoch kein korrektes Ergebnis, da CN und cn unterschiedlich sind.
und ich möchte auch id, user_id, note_id im Ergebnis.

0
carl johnson 19 Aug. 2020 im 05:46

3 Antworten

Beste Antwort

Wenn Ihre Datenbank window functions unterstützt, möchten Sie wahrscheinlich so etwas. Versuchen Sie es mit collate utf8mb4_bin, um festzustellen, ob dies bei der benötigten Groß- und Kleinschreibung hilfreich ist

select id, 
       user_id, 
       note_id, 
       subject_name, 
       count(subject_name collate utf8mb4_bin) over (partition by user_id, subject_name collate utf8mb4_bin) 
from notes_subject; 

Wenn window functions nicht in Frage kommt, können Sie auch separat aggregieren und wieder mit der Haupttabelle verbinden.

DEMO

1
Rajat 19 Aug. 2020 im 03:15

Sie können einfach Binary verwenden, um es zu wirken.

SELECT count(*), CAST(subject_name as BINARY) AS lastname_cs 
FROM notes_subject where user_id=2 
GROUP BY CAST(subject_name as BINARY); 
0
carl johnson 19 Aug. 2020 im 04:52

Posting eine andere Alternative, die von selecting the group by column as a binary field ist.

Getestet in dbfiddle mit MYSQL 8.0-Version

SELECT cast(subject_name as binary) subject_name, COUNT(subject_name)  cnt
  FROM notes_subject 
 WHERE user_id=2 
GROUP BY cast(subject_name as binary)
0
Sujitmohanty30 19 Aug. 2020 im 04:20